Skip to content

Commit 5386414

Browse files
author
Gaël UTARD
committed
Use TMSTileFilter from DRF-GIS
1 parent 4bd6f69 commit 5386414

File tree

5 files changed

+56
-6
lines changed

5 files changed

+56
-6
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 2.2.17 on 2020-11-12 10:10
2+
3+
import django.contrib.gis.db.models.fields
4+
from django.db import migrations
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('core', '0018_remove_other_objects_from_factories'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='path',
16+
name='geom',
17+
field=django.contrib.gis.db.models.fields.LineStringField(srid=2154),
18+
),
19+
]

geotrek/core/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def get_queryset(self):
5858

5959
class Path(AddPropertyMixin, MapEntityMixin, AltimetryMixin,
6060
TimeStampedModelMixin, StructureRelated):
61-
geom = models.LineStringField(srid=settings.SRID, spatial_index=False)
61+
geom = models.LineStringField(srid=settings.SRID)
6262
geom_cadastre = models.LineStringField(null=True, srid=settings.SRID, spatial_index=False,
6363
editable=False)
6464
valid = models.BooleanField(default=True, verbose_name=_("Validity"),

mapentity/registry.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ def scan_views(self):
6565
# Filter to views inherited from MapEntity base views
6666
picked = []
6767
rest_viewset = None
68+
tile_view = None
6869
list_view = None
6970

7071
for name, view in inspect.getmembers(views_module):
@@ -79,6 +80,8 @@ def scan_views(self):
7980
if view_model is self.model:
8081
if issubclass(view, mapentity_views.MapEntityViewSet):
8182
rest_viewset = view
83+
elif issubclass(view, mapentity_views.MapEntityTileLayer):
84+
tile_view = view
8285
elif issubclass(view, mapentity_views.MapEntityList):
8386
picked.append(view)
8487
list_view = view
@@ -123,6 +126,18 @@ class dynamic_viewset(mapentity_views.MapEntityViewSet):
123126

124127
self.rest_router.register(self.modelname + 's', rest_viewset, basename=self.modelname)
125128

129+
# Dynamically define tile view
130+
if tile_view is None:
131+
_queryset = self.get_queryset()
132+
_serializer = self.get_tile_serializer()
133+
134+
class dynamic_tile_view(mapentity_views.MapEntityTileLayer):
135+
queryset = _queryset
136+
serializer_class = _serializer
137+
tile_view = dynamic_tile_view
138+
139+
picked.append(tile_view)
140+
126141
# Returns Django URL patterns
127142
return self.__view_classes_to_url(*picked)
128143

@@ -151,6 +166,20 @@ class Meta:
151166

152167
return Serializer
153168

169+
def get_tile_serializer(self):
170+
_model = self.model
171+
172+
class Serializer(GeoFeatureModelSerializer):
173+
api_geom = GeometryField(read_only=True, precision=7)
174+
175+
class Meta:
176+
model = _model
177+
geo_field = "api_geom"
178+
id_field = 'id'
179+
fields = ('id', )
180+
181+
return Serializer
182+
154183
def get_queryset(self):
155184
return self.model.objects.all()
156185

mapentity/views/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737

3838
MAPENTITY_GENERIC_VIEWS = [
3939
MapEntityLayer,
40-
MapEntityTileLayer,
4140
MapEntityList,
4241
MapEntityJsonList,
4342
MapEntityFormat,

mapentity/views/api.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
from djgeojson.views import GeoJSONLayerView
1313
from rest_framework import viewsets
14+
from rest_framework.generics import ListAPIView
15+
from rest_framework.permissions import DjangoModelPermissionsOrAnonReadOnly
1416

1517
from mapentity import models as mapentity_models
1618
from ..settings import API_SRID, app_settings
@@ -58,17 +60,18 @@ def render_to_response(self, context, **response_kwargs):
5860
return super(MapEntityLayer, self).render_to_response(context, **response_kwargs)
5961

6062

61-
class MapEntityTileLayer(MapEntityLayer):
62-
geometry_field = 'simplified_geom'
63+
class MapEntityTileLayer(ListAPIView):
64+
permission_classes = [DjangoModelPermissionsOrAnonReadOnly]
6365

6466
@classmethod
6567
def get_entity_kind(cls):
6668
return mapentity_models.ENTITY_TILE_LAYER
6769

6870
def get_queryset(self):
69-
qs = super().get_queryset()
71+
qs = self.queryset
7072
qs = qs.filter(geom__intersects=self.bbox)
71-
return qs.annotate(simplified_geom=Func('geom', 2 * self.pixel_size, function='ST_SimplifyPreserveTopology'))
73+
# qs = qs.filter(length__gte=2 * self.pixel_size)
74+
return qs.annotate(api_geom=Transform(Func('geom', self.pixel_size, function='ST_SimplifyPreserveTopology'), API_SRID))
7275

7376
@property
7477
def pixel_size(self):

0 commit comments

Comments
 (0)