diff --git a/konova/utils/geometry/geometry_validator.py b/konova/utils/geometry/geometry_validator.py index a5af9f24..8cb4e084 100644 --- a/konova/utils/geometry/geometry_validator.py +++ b/konova/utils/geometry/geometry_validator.py @@ -180,6 +180,24 @@ class GeometryProcessor: is_area_valid = geom.area > 1 # > 1m² (SRID:25832) return is_area_valid + @staticmethod + def is_valid_geometry(geom: gdal.OGRGeometry) -> bool: + """ Checks whether the geometry is technically valid + + Args: + geom (OGRGeometry): The geom + + Returns: + + """ + try: + # Check geometry validity by triggering some low cost processing like centroid calculation + geom.centroid + geom.boundary + return True + except gdal.GDALException as e: + return False + class GeoJsonValidator: """ GeoJson Validator validates geojson (e.g. from API or form input) @@ -305,6 +323,10 @@ class GeoJsonValidator: g = gdal.OGRGeometry(feature_geom, srs=self._srs) if g.empty: continue + + if not GeometryProcessor.is_valid_geometry(g): + raise AssertionError(_("This feature holds malicious parts and can not be processed!")) + g = GeometryProcessor.cast_to_rlp_srid(g) if not GeometryProcessor.is_valid_25832(g): raise AssertionError(_("This feature does not hold valid EPSG:25832 coordinates:\n {}".format(g.geojson))) diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 5dfbc305..390b7e26 100644 Binary files a/locale/de/LC_MESSAGES/django.mo and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 4b1668b4..9b2e4fa2 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -45,7 +45,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-09-13 12:06+0200\n" +"POT-Creation-Date: 2026-09-17 16:25+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2012,7 +2012,11 @@ msgstr "In Zwischenablage kopiert" msgid "Search" msgstr "Suchen" -#: konova/utils/geometry/geometry_validator.py:311 +#: konova/utils/geometry/geometry_validator.py:328 +msgid "This feature holds malicious parts and can not be processed!" +msgstr "Teile der Geometrie sind ungültig und können nicht verarbeitet werden!" + +#: konova/utils/geometry/geometry_validator.py:332 msgid "" "This feature does not hold valid EPSG:25832 coordinates:\n" " {}" @@ -2020,7 +2024,7 @@ msgstr "" "Dieses Feature enthält keine validen EPSG:25832 Koordinaten:\n" " {}" -#: konova/utils/geometry/geometry_validator.py:319 +#: konova/utils/geometry/geometry_validator.py:340 msgid "Only surfaces allowed. Points or lines must be buffered." msgstr "" "Nur Flächen erlaubt. Punkte oder Linien müssen zu Flächen gepuffert werden."