Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

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
  • Loading branch information...
commit 3f8f3f8411650bd328cd4054941c18ff9da1d1f6 1 parent 70f9a4f
Justin Bronn jbronn authored
6 django/contrib/gis/geos/geometry.py
View
@@ -389,6 +389,9 @@ def hexewkb(self):
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 @@ def ewkb(self):
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)
26 django/contrib/gis/geos/tests/test_geos.py
View
@@ -84,16 +84,34 @@ def test01b_hexewkb(self):
# 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):
Please sign in to comment.
Something went wrong with that request. Please try again.