diff options
| author | Andrew Harris <aharris@outsideinc.com> | 2025-01-10 10:11:03 -0500 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-02-03 11:34:23 +0000 |
| commit | 5f30fd2358fd60a514bdba31594bfc8122f30167 (patch) | |
| tree | d268203d195f4c384b9b806eb538f3e88b633842 /tests/gis_tests | |
| parent | 198b30168d4e94af42e0dc7967bd3259b5c5790b (diff) | |
Refs #36036 -- Added support for GEOSHasM.
Diffstat (limited to 'tests/gis_tests')
| -rw-r--r-- | tests/gis_tests/gdal_tests/test_geom.py | 19 | ||||
| -rw-r--r-- | tests/gis_tests/geos_tests/test_geos.py | 36 |
2 files changed, 50 insertions, 5 deletions
diff --git a/tests/gis_tests/gdal_tests/test_geom.py b/tests/gis_tests/gdal_tests/test_geom.py index 919e547511..a296af75f9 100644 --- a/tests/gis_tests/gdal_tests/test_geom.py +++ b/tests/gis_tests/gdal_tests/test_geom.py @@ -1,5 +1,6 @@ import json import pickle +from unittest import mock, skipIf from django.contrib.gis.gdal import ( CoordTransform, @@ -10,6 +11,7 @@ from django.contrib.gis.gdal import ( ) from django.contrib.gis.gdal.geometries import CircularString, CurvePolygon from django.contrib.gis.geos import GEOSException +from django.contrib.gis.geos.libgeos import geos_version_tuple from django.template import Context from django.template.engine import Engine from django.test import SimpleTestCase @@ -871,12 +873,19 @@ class OGRGeomTest(SimpleTestCase, TestDataMixin): self.assertEqual(geom.geom_type.name, "PointM") self.assertEqual(geom.geom_type.num, 2001) + @skipIf(geos_version_tuple() < (3, 12), "GEOS >= 3.12.0 is required") def test_point_m_dimension_geos(self): - """GEOSGeometry does not yet support the M dimension.""" - geom = OGRGeometry("POINT ZM (1 2 3 4)") - self.assertEqual(geom.geos.wkt, "POINT Z (1 2 3)") - geom = OGRGeometry("POINT M (1 2 3)") - self.assertEqual(geom.geos.wkt, "POINT (1 2)") + geo_zm = OGRGeometry("POINT ZM (1 2 3 4)") + self.assertEqual(geo_zm.geos.wkt, "POINT ZM (1 2 3 4)") + geo_m = OGRGeometry("POINT M (1 2 3)") + self.assertEqual(geo_m.geos.wkt, "POINT M (1 2 3)") + + @mock.patch("django.contrib.gis.geos.libgeos.geos_version", lambda: b"3.11.0") + def test_point_m_dimension_geos_version(self): + geo_zm = OGRGeometry("POINT ZM (1 2 3 4)") + self.assertEqual(geo_zm.geos.wkt, "POINT Z (1 2 3)") + geo_m = OGRGeometry("POINT M (1 2 3)") + self.assertEqual(geo_m.geos.wkt, "POINT (1 2)") def test_centroid(self): point = OGRGeometry("POINT (1 2 3)") diff --git a/tests/gis_tests/geos_tests/test_geos.py b/tests/gis_tests/geos_tests/test_geos.py index 0051a88b07..018eccae4a 100644 --- a/tests/gis_tests/geos_tests/test_geos.py +++ b/tests/gis_tests/geos_tests/test_geos.py @@ -86,6 +86,22 @@ class GEOSTest(SimpleTestCase, TestDataMixin): # Redundant sanity check. self.assertEqual(4326, GEOSGeometry(hexewkb_2d).srid) + @skipIf(geos_version_tuple() < (3, 12), "GEOS >= 3.12.0 is required") + def test_4d_hexewkb(self): + ogc_hex_4d = ( + b"01010000C00000000000000000000000000000" + b"F03F00000000000000400000000000000000" + ) + hexewkb_4d = ( + b"01010000E0E61000000000000000000000000000000000" + b"F03F00000000000000400000000000000000" + ) + pnt_4d = Point(0, 1, 2, 0, srid=4326) + self.assertEqual(ogc_hex_4d, pnt_4d.hex) + self.assertEqual(hexewkb_4d, pnt_4d.hexewkb) + self.assertIs(GEOSGeometry(hexewkb_4d).hasm, True) + self.assertEqual(memoryview(a2b_hex(hexewkb_4d)), pnt_4d.ewkb) + def test_kml(self): "Testing KML output." for tg in self.geometries.wkt_out: @@ -311,6 +327,20 @@ class GEOSTest(SimpleTestCase, TestDataMixin): with self.assertRaisesMessage(GEOSException, msg): g1.equals_identical(g2) + @skipIf(geos_version_tuple() < (3, 12), "GEOS >= 3.12.0 is required") + def test_hasm(self): + pnt_xym = fromstr("POINT M (5 23 8)") + self.assertTrue(pnt_xym.hasm) + pnt_xyzm = fromstr("POINT (5 23 8 0)") + self.assertTrue(pnt_xyzm.hasm) + + @mock.patch("django.contrib.gis.geos.libgeos.geos_version", lambda: b"3.11.0") + def test_hasm_geos_version(self): + p = fromstr("POINT (1 2 3)") + msg = "GEOSGeometry.hasm requires GEOS >= 3.12.0." + with self.assertRaisesMessage(GEOSException, msg): + p.hasm + def test_points(self): "Testing Point objects." prev = fromstr("POINT(0 0)") @@ -1255,6 +1285,12 @@ class GEOSTest(SimpleTestCase, TestDataMixin): self.assertEqual(g2.hex, g2.ogr.hex) self.assertEqual("WGS 84", g2.srs.name) + @skipIf(geos_version_tuple() < (3, 12), "GEOS >= 3.12.0 is required") + def test_gdal_4d(self): + g1_4d = fromstr("POINT(5 23 8 0)") + self.assertIsInstance(g1_4d.ogr, gdal.OGRGeometry) + self.assertEqual(g1_4d.ogr.m, 0) + def test_copy(self): "Testing use with the Python `copy` module." import copy |
