mirror of https://github.com/django/django.git
Now raise an exception when trying to export 3D (HEX)EWKB when using GEOS 3.0 due to bug in that underlying library version.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@11731 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
70f9a4f6ce
commit
3f8f3f8411
|
@ -389,6 +389,9 @@ class GEOSGeometry(GEOSBase, ListMixin):
|
|||
geometry.
|
||||
"""
|
||||
if self.hasz:
|
||||
if not GEOS_PREPARE:
|
||||
# See: http://trac.osgeo.org/geos/ticket/216
|
||||
raise GEOSException('Upgrade GEOS to 3.1 to get valid 3D HEXEWKB.')
|
||||
return ewkb_w3d.write_hex(self)
|
||||
else:
|
||||
return ewkb_w.write_hex(self)
|
||||
|
@ -422,6 +425,9 @@ class GEOSGeometry(GEOSBase, ListMixin):
|
|||
and Z values that are a part of this geometry.
|
||||
"""
|
||||
if self.hasz:
|
||||
if not GEOS_PREPARE:
|
||||
# See: http://trac.osgeo.org/geos/ticket/216
|
||||
raise GEOSException('Upgrade GEOS to 3.1 to get valid 3D EWKB.')
|
||||
return ewkb_w3d.write(self)
|
||||
else:
|
||||
return ewkb_w.write(self)
|
||||
|
|
|
@ -84,16 +84,34 @@ class GEOSTest(unittest.TestCase):
|
|||
|
||||
# HEXEWKB should be appropriate for its dimension -- have to use an
|
||||
# a WKBWriter w/dimension set accordingly, else GEOS will insert
|
||||
# garbage into 3D coordinate if there is none.
|
||||
# garbage into 3D coordinate if there is none. Also, GEOS has a
|
||||
# a bug in versions prior to 3.1 that puts the X coordinate in
|
||||
# place of Z; an exception should be raised on those versions.
|
||||
self.assertEqual(hexewkb_2d, pnt_2d.hexewkb)
|
||||
self.assertEqual(hexewkb_3d, pnt_3d.hexewkb)
|
||||
if GEOS_PREPARE:
|
||||
self.assertEqual(hexewkb_3d, pnt_3d.hexewkb)
|
||||
self.assertEqual(True, GEOSGeometry(hexewkb_3d).hasz)
|
||||
else:
|
||||
try:
|
||||
hexewkb = pnt_3d.hexewkb
|
||||
except GEOSException:
|
||||
pass
|
||||
else:
|
||||
self.fail('Should have raised GEOSException.')
|
||||
|
||||
# Same for EWKB.
|
||||
self.assertEqual(buffer(a2b_hex(hexewkb_2d)), pnt_2d.ewkb)
|
||||
self.assertEqual(buffer(a2b_hex(hexewkb_3d)), pnt_3d.ewkb)
|
||||
if GEOS_PREPARE:
|
||||
self.assertEqual(buffer(a2b_hex(hexewkb_3d)), pnt_3d.ewkb)
|
||||
else:
|
||||
try:
|
||||
ewkb = pnt_3d.ewkb
|
||||
except GEOSException:
|
||||
pass
|
||||
else:
|
||||
self.fail('Should have raised GEOSException')
|
||||
|
||||
# Redundant sanity check.
|
||||
self.assertEqual(True, GEOSGeometry(hexewkb_3d).hasz)
|
||||
self.assertEqual(4326, GEOSGeometry(hexewkb_2d).srid)
|
||||
|
||||
def test01c_kml(self):
|
||||
|
|
Loading…
Reference in New Issue