fix editor up a bit

This commit is contained in:
Laura Klünder 2023-06-26 18:15:34 +02:00
parent b1336abd62
commit 142e307fc3
3 changed files with 11 additions and 4 deletions

View file

@ -69,7 +69,7 @@ class EditorViewSet(EditorViewSetMixin, ViewSet):
@staticmethod @staticmethod
def _get_level_geometries(level): def _get_level_geometries(level):
buildings = level.buildings.all() buildings = level.buildings.all()
buildings_geom = unary_union([building.geometry for building in buildings]) buildings_geom = unary_union([building.geometry.wrapped_geom for building in buildings])
spaces = {space.pk: space for space in level.spaces.all()} spaces = {space.pk: space for space in level.spaces.all()}
holes_geom = [] holes_geom = []
for space in spaces.values(): for space in spaces.values():
@ -77,9 +77,9 @@ class EditorViewSet(EditorViewSetMixin, ViewSet):
space.geometry = space.geometry.difference(buildings_geom) space.geometry = space.geometry.difference(buildings_geom)
columns = [column.geometry for column in space.columns.all()] columns = [column.geometry for column in space.columns.all()]
if columns: if columns:
columns_geom = unary_union([column.geometry for column in space.columns.all()]) columns_geom = unary_union([column.geometry.wrapped_geom for column in space.columns.all()])
space.geometry = space.geometry.difference(columns_geom) space.geometry = space.geometry.difference(columns_geom)
holes = [hole.geometry for hole in space.holes.all()] holes = [hole.geometry.wrapped_geom for hole in space.holes.all()]
if holes: if holes:
space_holes_geom = unary_union(holes) space_holes_geom = unary_union(holes)
holes_geom.append(space_holes_geom.intersection(space.geometry)) holes_geom.append(space_holes_geom.intersection(space.geometry))

View file

@ -1111,6 +1111,7 @@ editor = {
var form = geometry_field.closest('form'); var form = geometry_field.closest('form');
var options, mapitem_type = form.attr('data-new'); var options, mapitem_type = form.attr('data-new');
var geometry_value = geometry_field.val(); var geometry_value = geometry_field.val();
if (geometry_value === 'null') geometry_value = '';
if (geometry_value) { if (geometry_value) {
editor._creating_type = null; editor._creating_type = null;
if (editor._editing_layer !== null) { if (editor._editing_layer !== null) {

View file

@ -56,7 +56,7 @@ class GeometryField(models.JSONField):
if value is None or value == '': if value is None or value == '':
return None return None
try: try:
geometry = shape(json.loads(value)) geometry = shape(value)
except Exception: except Exception:
raise ValidationError(_('Invalid GeoJSON.')) raise ValidationError(_('Invalid GeoJSON.'))
self._validate_geomtype(geometry) self._validate_geomtype(geometry)
@ -67,6 +67,9 @@ class GeometryField(models.JSONField):
self._validate_geomtype(geometry) self._validate_geomtype(geometry)
return geometry return geometry
def validate(self, value, model_instance):
super().validate(mapping(value), model_instance)
@cached_property @cached_property
def classes(self): def classes(self):
return { return {
@ -101,6 +104,9 @@ class GeometryField(models.JSONField):
return format_geojson(mapping(value), rounded=False) if as_json else value return format_geojson(mapping(value), rounded=False) if as_json else value
def get_db_prep_value(self, value, connection, prepared=False):
return super().get_db_prep_value(mapping(value), connection, prepared=prepared)
def get_prep_value(self, value): def get_prep_value(self, value):
if value is None: if value is None:
return None return None