Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions giscube/templates/admin/giscube/web_map.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@
}).addTo(map);
baseLayers['{{ layer.name }}'] = layer;
{% endif %}
{% if layer.type == 'wmts' %}
url = '{{ layer.url }}?SERVICE=WMTS&REQUEST=GetTile' +
'&LAYER={{ layer.layers }}&FORMAT=image/png' +
'&TILEMATRIXSET=EPSG:3857&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}';
layer = L.tileLayer(url).addTo(map);
baseLayers['{{ layer.name }}'] = layer;
{% endif %}
{% endfor %}
L.control.layers(baseLayers, {}).addTo(map);
};
Expand Down
17 changes: 12 additions & 5 deletions giscube/views_mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,20 @@ def getlegendgraphic(self, request):
def getfeatureinfo(self, request):
url = self.build_url(request)
return super().get(request, url=url)

def gettile(self, request):
url = self.build_url(request)
return super().get(request, url=url)

def get(self, request):
wms_service = self.param_get(request.GET, 'service', '').lower()
wms_request = self.param_get(request.GET, 'request', '').lower()
if wms_service == 'wms':
if wms_request in ('getmap', 'getcapabilities', 'getlegendgraphic', 'getfeatureinfo'):
return getattr(self, wms_request)(request)
service_type = self.param_get(request.GET, 'service', '').lower()
service_request = self.param_get(request.GET, 'request', '').lower()
if service_type == 'wms':
if service_request in ('getmap', 'getcapabilities', 'getlegendgraphic', 'getfeatureinfo'):
return getattr(self, service_request)(request)
elif service_type == 'wmts':
if service_request in ('getcapabilities', 'gettile', 'getfeatureinfo'):
return getattr(self, service_request)(request)
return HttpResponseBadRequest()


Expand Down
24 changes: 17 additions & 7 deletions qgisserver/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,9 @@ class ServiceAdmin(TileCacheModelAdminMixin, ResourceAdminMixin, TabsMixin, admi
change_form_template = 'admin/qgisserver/service/change_form.html'
form = ServiceChangeForm
autocomplete_fields = ('category',)
list_display = ('name', 'title', 'url_wms', 'visible_on_geoportal',)
list_display = ('name', 'title', 'service_type', 'tile_cache_enabled', 'service_url', 'visible_on_geoportal',)
list_filter = (('category', RelatedDropdownFilter), ('project', RelatedDropdownFilter),
'visible_on_geoportal')
'visible_on_geoportal', 'service_type', 'tilecache_enabled')
exclude = ('service_path',)
search_fields = ('name', 'title', 'keywords')
filter_horizontal = ('servers',)
Expand Down Expand Up @@ -102,7 +102,7 @@ class ServiceAdmin(TileCacheModelAdminMixin, ResourceAdminMixin, TabsMixin, admi
}),
(None, {
'fields': [
'wms_single_image', 'wms_buffer_enabled', 'wms_buffer_size', 'wms_tile_sizes',
'service_type', 'wms_single_image', 'wms_buffer_enabled', 'wms_buffer_size', 'wms_tile_sizes',
'wms_getfeatureinfo_enabled',
'options', "choose_individual_layers", "read_layers_automatically", "layers"
],
Expand Down Expand Up @@ -148,10 +148,20 @@ def get_queryset(self, request):
queryset = queryset.order_by('custom_order')
return queryset

def url_wms(self, obj):
url = '%s?service=WMS&version=1.1.1&request=GetCapabilities' % obj.service_url
return format_html('<a target="_blank" href="{0}">WMS URL {1}</a>', url, obj.name)
url_wms.short_description = 'WMS URL'
def service_url(self, obj):
if obj.service_type == 'wms':
url = '%s?service=WMS&version=1.1.1&request=GetCapabilities' % obj.service_url
return format_html('<a target="_blank" href="{0}">WMS URL {1}</a>', url, obj.name)
elif obj.service_type == 'wmts':
url = '%s?service=WMTS&request=GetCapabilities' % obj.service_url
return format_html('<a target="_blank" href="{0}">WMTS URL {1}</a>', url, obj.name)
return ''
service_url.short_description = 'Service URL'

def tile_cache_enabled(self, obj):
return obj.tilecache_enabled
tile_cache_enabled.boolean = True
tile_cache_enabled.short_description = _('tile cache enabled')

def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
Expand Down
2 changes: 1 addition & 1 deletion qgisserver/giscube_search_indexes.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def prepare_children(self, obj):
else:
url = url_slash_join(settings.GISCUBE_URL, '/qgisserver/services/%s' % obj.name)
service.update({
'type': 'WMS',
'type': obj.service_type,
'url': url,
'layers': obj.default_layer or '',
'projection': '3857',
Expand Down
18 changes: 18 additions & 0 deletions qgisserver/migrations/0035_service_service_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.2.17 on 2025-01-09 14:17

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('qgisserver', '0034_auto_20241010_1202'),
]

operations = [
migrations.AddField(
model_name='service',
name='service_type',
field=models.CharField(choices=[('wms', 'WMS'), ('wmts', 'WMTS')], default='wms', max_length=255, verbose_name='service type'),
),
]
15 changes: 14 additions & 1 deletion qgisserver/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ def project_unique_service_directory(instance, filename):


class Service(TileCacheModelMixin, models.Model):
TYPE_CHOICES = (
('wms', 'WMS'),
('wmts', 'WMTS')
)

category = models.ForeignKey(
Category, null=True, blank=True, on_delete=models.SET_NULL,
related_name='qgisserver_services')
Expand Down Expand Up @@ -96,9 +101,13 @@ class Service(TileCacheModelMixin, models.Model):
help_text = '%s %s' % (_('Field between curly braces. e.g.'), '{%s}' % _('street'))
popup = models.TextField(_('popup'), blank=True, null=True, help_text=help_text)

service_type = models.CharField(_('service type'), max_length=255, choices=TYPE_CHOICES, default='wms')

def save(self, *args, **kwargs):
if self.read_layers_automatically and self.wms_url:
if self.read_layers_automatically and self.service_type == "wms" and self.wms_url:
self.layers = get_wms_layers(self.wms_url)
elif self.read_layers_automatically and self.service_type == "wmts" and self.wmts_url:
self.layers = get_wms_layers(self.wmts_url)
super().save(*args, **kwargs)

@property
Expand All @@ -115,6 +124,10 @@ def service_url(self):
@property
def wms_url(self):
return '%s?service=WMS&version=1.1.1&request=GetCapabilities' % self.service_url

@property
def wmts_url(self):
return '%s?service=WMTS&request=GetCapabilities' % self.service_url

@property
def service_internal_url(self):
Expand Down
4 changes: 2 additions & 2 deletions qgisserver/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@ def get(self, request, service_name):
layers = []
layers.append(
{
'name': '%s (WMS)' % (service.title or service.name),
'type': 'wms',
'name': '%s (%s)' % (service.title or service.name, service.service_type),
'type': service.service_type,
'layers': service.default_layer,
'url': reverse('qgisserver', args=(service.name, '',)),
'transparent': service.tilecache_enabled and service.tilecache_transparent
Expand Down