From b1592dd73b47d81e8a8f5e585827fccde015c7c2 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Sat, 18 Jun 2016 18:08:53 +0200 Subject: [PATCH] [1.10.x] Fixed #26750 -- Fixed introspection for geography point field with dim=3 Thanks Yegor Kazantsev for the report and the initial patch. Backport of 140c23502 from master. --- django/contrib/gis/gdal/geomtype.py | 3 +++ tests/gis_tests/inspectapp/models.py | 1 + tests/gis_tests/inspectapp/tests.py | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/django/contrib/gis/gdal/geomtype.py b/django/contrib/gis/gdal/geomtype.py index 4ba2b153dec..0ed7e663430 100644 --- a/django/contrib/gis/gdal/geomtype.py +++ b/django/contrib/gis/gdal/geomtype.py @@ -18,6 +18,7 @@ class OGRGeomType(object): 7: 'GeometryCollection', 100: 'None', 101: 'LinearRing', + 102: 'PointZ', 1 + wkb25bit: 'Point25D', 2 + wkb25bit: 'LineString25D', 3 + wkb25bit: 'Polygon25D', @@ -84,6 +85,8 @@ class OGRGeomType(object): return None elif s == 'Unknown': s = 'Geometry' + elif s == 'PointZ': + s = 'Point' return s + 'Field' def to_multi(self): diff --git a/tests/gis_tests/inspectapp/models.py b/tests/gis_tests/inspectapp/models.py index 4936a0e704a..dacb4d48f62 100644 --- a/tests/gis_tests/inspectapp/models.py +++ b/tests/gis_tests/inspectapp/models.py @@ -19,6 +19,7 @@ class AllOGRFields(models.Model): class Fields3D(models.Model): point = models.PointField(dim=3) + pointg = models.PointField(dim=3, geography=True) line = models.LineStringField(dim=3) poly = models.PolygonField(dim=3) diff --git a/tests/gis_tests/inspectapp/tests.py b/tests/gis_tests/inspectapp/tests.py index 1e774218a22..0df93099323 100644 --- a/tests/gis_tests/inspectapp/tests.py +++ b/tests/gis_tests/inspectapp/tests.py @@ -12,6 +12,7 @@ from django.test.utils import modify_settings from django.utils.six import StringIO from ..test_data import TEST_DATA +from ..utils import postgis if HAS_GDAL: from django.contrib.gis.gdal import Driver, GDALException, GDAL_VERSION @@ -52,10 +53,14 @@ class InspectDbTests(TestCase): output = out.getvalue() if connection.features.supports_geometry_field_introspection: self.assertIn('point = models.PointField(dim=3)', output) + if postgis: + # Geography type is specific to PostGIS + self.assertIn('pointg = models.PointField(geography=True, dim=3)', output) self.assertIn('line = models.LineStringField(dim=3)', output) self.assertIn('poly = models.PolygonField(dim=3)', output) else: self.assertIn('point = models.GeometryField(', output) + self.assertIn('pointg = models.GeometryField(', output) self.assertIn('line = models.GeometryField(', output) self.assertIn('poly = models.GeometryField(', output)