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.
|
geometry.
|
||||||
"""
|
"""
|
||||||
if self.hasz:
|
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)
|
return ewkb_w3d.write_hex(self)
|
||||||
else:
|
else:
|
||||||
return ewkb_w.write_hex(self)
|
return ewkb_w.write_hex(self)
|
||||||
|
@ -422,6 +425,9 @@ class GEOSGeometry(GEOSBase, ListMixin):
|
||||||
and Z values that are a part of this geometry.
|
and Z values that are a part of this geometry.
|
||||||
"""
|
"""
|
||||||
if self.hasz:
|
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)
|
return ewkb_w3d.write(self)
|
||||||
else:
|
else:
|
||||||
return ewkb_w.write(self)
|
return ewkb_w.write(self)
|
||||||
|
|
|
@ -84,16 +84,34 @@ class GEOSTest(unittest.TestCase):
|
||||||
|
|
||||||
# HEXEWKB should be appropriate for its dimension -- have to use an
|
# HEXEWKB should be appropriate for its dimension -- have to use an
|
||||||
# a WKBWriter w/dimension set accordingly, else GEOS will insert
|
# 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_2d, pnt_2d.hexewkb)
|
||||||
|
if GEOS_PREPARE:
|
||||||
self.assertEqual(hexewkb_3d, pnt_3d.hexewkb)
|
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.
|
# Same for EWKB.
|
||||||
self.assertEqual(buffer(a2b_hex(hexewkb_2d)), pnt_2d.ewkb)
|
self.assertEqual(buffer(a2b_hex(hexewkb_2d)), pnt_2d.ewkb)
|
||||||
|
if GEOS_PREPARE:
|
||||||
self.assertEqual(buffer(a2b_hex(hexewkb_3d)), pnt_3d.ewkb)
|
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.
|
# Redundant sanity check.
|
||||||
self.assertEqual(True, GEOSGeometry(hexewkb_3d).hasz)
|
|
||||||
self.assertEqual(4326, GEOSGeometry(hexewkb_2d).srid)
|
self.assertEqual(4326, GEOSGeometry(hexewkb_2d).srid)
|
||||||
|
|
||||||
def test01c_kml(self):
|
def test01c_kml(self):
|
||||||
|
|
Loading…
Reference in New Issue