From 22a92cb3df8c8abf71e2339d6eb059c2d523181a Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Fri, 10 Jul 2026 19:01:24 +0200 Subject: [PATCH] # Hotfix * adds special error message treatment for non-EPSG:4326 geometries --- api/utils/serializer/serializer.py | 3 +++ konova/models/geometry.py | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/api/utils/serializer/serializer.py b/api/utils/serializer/serializer.py index 4ed514c2..4924d742 100644 --- a/api/utils/serializer/serializer.py +++ b/api/utils/serializer/serializer.py @@ -156,6 +156,9 @@ class AbstractModelAPISerializer: if isinstance(geojson, dict): geojson = json.dumps(geojson) geometry = geos.fromstr(geojson) + is_4326 = Geometry.is_valid_4326(geometry) + if not is_4326: + raise ValueError("Geometry not in EPSG:4326 (WGS84). Unknown spatial reference system.") geometry = Geometry.cast_to_rlp_srid(geometry) geometry = Geometry.cast_to_multipolygon(geometry) return geometry diff --git a/konova/models/geometry.py b/konova/models/geometry.py index 663d5413..f064d01b 100644 --- a/konova/models/geometry.py +++ b/konova/models/geometry.py @@ -462,6 +462,26 @@ class Geometry(BaseResource): conflict_geoms = Geometry.objects.filter(id__in=conflict_geoms_id) return conflict_geoms + @staticmethod + def is_valid_4326(geometry): + """ Checks whether a given geometry's coordinates are in a valid range to be of EPSG:4326 + + Args: + geometry: The geometry + + Returns: + ret_val (bool): Whether the geometry is valid EPSG:4326 + """ + if not geometry.centroid.coords: + # No coordinates at all found, therefore technically proper 4326 + return True + + try: + lat,lon = geometry.centroid.coords + return (-90.0 <= lat <= 90.0) and (-180.0 <= lon <= 180.0) + except IndexError: + return False + class GeometryConflict(UuidModel): """