DataOverlayFeature needs LevelGeometryMixin

This commit is contained in:
Gwendolyn 2024-12-20 11:45:51 +01:00
parent 90e68b7bbf
commit e6d2afc99b
2 changed files with 6 additions and 5 deletions

View file

@ -56,7 +56,7 @@ def _get_geometries_for_one_level(level):
results.extend(sorted(spaces.values(), key=space_sorting_func)) results.extend(sorted(spaces.values(), key=space_sorting_func))
results.extend(level.data_overlay_features.all()) results.extend(level.dataoverlayfeatures.all())
return results return results
@ -148,7 +148,7 @@ def get_level_geometries_result(request, level_id: int, update_cache_key: str, u
Prefetch('spaces__beacon_measurements', BeaconMeasurement.objects.only('geometry', 'space')), Prefetch('spaces__beacon_measurements', BeaconMeasurement.objects.only('geometry', 'space')),
Prefetch('spaces__ranging_beacons', RangingBeacon.objects.only('geometry', 'space')), Prefetch('spaces__ranging_beacons', RangingBeacon.objects.only('geometry', 'space')),
Prefetch('spaces__graphnodes', graphnodes_qs), Prefetch('spaces__graphnodes', graphnodes_qs),
Prefetch('data_overlay_features', DataOverlayFeature.objects.only('geometry', 'overlay_id', 'level')) Prefetch('dataoverlayfeatures', DataOverlayFeature.objects.only('geometry', 'overlay_id', 'level'))
) )
levels = {s.pk: s for s in levels} levels = {s.pk: s for s in levels}

View file

@ -7,7 +7,7 @@ from django_pydantic_field import SchemaField
from c3nav.mapdata.fields import GeometryField from c3nav.mapdata.fields import GeometryField
from c3nav.mapdata.models.access import AccessRestrictionMixin from c3nav.mapdata.models.access import AccessRestrictionMixin
from c3nav.mapdata.models.base import TitledMixin from c3nav.mapdata.models.base import TitledMixin
from c3nav.mapdata.models.geometry.base import GeometryMixin from c3nav.mapdata.models.geometry.level import LevelGeometryMixin
from c3nav.mapdata.utils.geometry import smart_mapping from c3nav.mapdata.utils.geometry import smart_mapping
from c3nav.mapdata.utils.json import format_geojson from c3nav.mapdata.utils.json import format_geojson
@ -16,6 +16,7 @@ class DataOverlay(TitledMixin, AccessRestrictionMixin, models.Model):
class GeometryType(models.TextChoices): class GeometryType(models.TextChoices):
POLYGON = "polygon", _("Polygon") POLYGON = "polygon", _("Polygon")
LINESTRING = "linestring", _("Line string") LINESTRING = "linestring", _("Line string")
MULTIPOINT = "multipoint", _("Multipoint")
POINT = "point", _("Point") POINT = "point", _("Point")
description = models.TextField(blank=True, verbose_name=_('Description')) description = models.TextField(blank=True, verbose_name=_('Description'))
@ -38,10 +39,10 @@ class DataOverlay(TitledMixin, AccessRestrictionMixin, models.Model):
default_related_name = 'dataoverlays' default_related_name = 'dataoverlays'
class DataOverlayFeature(TitledMixin, GeometryMixin, models.Model): class DataOverlayFeature(TitledMixin, LevelGeometryMixin, models.Model):
overlay = models.ForeignKey('mapdata.DataOverlay', on_delete=models.CASCADE, verbose_name=_('Overlay'), related_name='features') overlay = models.ForeignKey('mapdata.DataOverlay', on_delete=models.CASCADE, verbose_name=_('Overlay'), related_name='features')
geometry = GeometryField() geometry = GeometryField()
level = models.ForeignKey('mapdata.Level', on_delete=models.CASCADE, verbose_name=_('level'), related_name='data_overlay_features') # level = models.ForeignKey('mapdata.Level', on_delete=models.CASCADE, verbose_name=_('level'), related_name='data_overlay_features')
external_url = models.URLField(blank=True, null=True, verbose_name=_('external URL')) external_url = models.URLField(blank=True, null=True, verbose_name=_('external URL'))
stroke_color = models.CharField(max_length=255, blank=True, null=True, verbose_name=_('stroke color')) stroke_color = models.CharField(max_length=255, blank=True, null=True, verbose_name=_('stroke color'))
stroke_width = models.FloatField(blank=True, null=True, verbose_name=_('stroke width')) stroke_width = models.FloatField(blank=True, null=True, verbose_name=_('stroke width'))