# Refactors API geometry processing

* refactors API geometry processing to use GeoJsonValidator and GeometryProcessor just like SimpleGeomForm
* moves cast_to_multipolygon, cast_to_rlp_srid, flatten_geom_to_2D, is_valid_4326 and is_area_valid into GeometryProcessor
* adds changeable SRID to GeoJsonValidator constructor
* updates test data
* updates test cases
This commit is contained in:
2026-09-12 17:58:00 +02:00
parent a067aafde1
commit 8ac8952729
13 changed files with 224 additions and 275 deletions
+10 -9
View File
@@ -9,10 +9,11 @@ Created on: 28.01.22
import json
from django.contrib.gis import geos
from django.contrib.gis.geos import MultiPolygon
from django.urls import reverse
from api.tests.v1.share.test_api_sharing import BaseAPIV1TestCase
from konova.models import Geometry
from konova.utils.geometry.geometry_validator import GeometryProcessor
class APIV1UpdateTestCase(BaseAPIV1TestCase):
@@ -64,8 +65,8 @@ class APIV1UpdateTestCase(BaseAPIV1TestCase):
put_props = put_body["properties"]
put_geom = geos.fromstr(json.dumps(put_body))
put_geom = Geometry.cast_to_rlp_srid(put_geom)
self.assertEqual(put_geom, self.intervention.geometry.geom)
put_geom = MultiPolygon(GeometryProcessor.cast_to_rlp_srid(put_geom))
self.assertTrue(put_geom.equals_exact(self.intervention.geometry.geom,0.00001))
self.assertEqual(put_props["title"], self.intervention.title)
self.assertNotEqual(modified_on, self.intervention.modified)
self.assertEqual(put_props["responsible"]["registration_file_number"], self.intervention.responsible.registration_file_number)
@@ -94,8 +95,8 @@ class APIV1UpdateTestCase(BaseAPIV1TestCase):
put_props = put_body["properties"]
put_geom = geos.fromstr(json.dumps(put_body))
put_geom = Geometry.cast_to_rlp_srid(put_geom)
self.assertEqual(put_geom, self.compensation.geometry.geom)
put_geom = MultiPolygon(GeometryProcessor.cast_to_rlp_srid(put_geom))
self.assertTrue(put_geom.equals_exact(self.compensation.geometry.geom, 0.00001))
self.assertEqual(put_props["title"], self.compensation.title)
self.assertNotEqual(modified_on, self.compensation.modified)
self.assertEqual(put_props["is_cef"], self.compensation.is_cef)
@@ -124,8 +125,8 @@ class APIV1UpdateTestCase(BaseAPIV1TestCase):
put_props = put_body["properties"]
put_geom = geos.fromstr(json.dumps(put_body))
put_geom = Geometry.cast_to_rlp_srid(put_geom)
self.assertEqual(put_geom, self.eco_account.geometry.geom)
put_geom = MultiPolygon(GeometryProcessor.cast_to_rlp_srid(put_geom))
self.assertTrue(put_geom.equals_exact(self.eco_account.geometry.geom, 0.00001))
self.assertEqual(put_props["title"], self.eco_account.title)
self.assertNotEqual(modified_on, self.eco_account.modified)
self.assertEqual(put_props["deductable_surface"], str(self.eco_account.deductable_surface))
@@ -156,8 +157,8 @@ class APIV1UpdateTestCase(BaseAPIV1TestCase):
put_props = put_body["properties"]
put_geom = geos.fromstr(json.dumps(put_body))
put_geom = Geometry.cast_to_rlp_srid(put_geom)
self.assertEqual(put_geom, self.ema.geometry.geom)
put_geom = MultiPolygon(GeometryProcessor.cast_to_rlp_srid(put_geom))
self.assertTrue(put_geom.equals_exact(self.ema.geometry.geom,0.00001))
self.assertEqual(put_props["title"], self.ema.title)
self.assertNotEqual(modified_on, self.ema.modified)
self.assertEqual(put_props["responsible"]["conservation_office"], self.ema.responsible.conservation_office)