|
@@ -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
|