Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
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
@jbronn jbronn authored
View
6 django/contrib/gis/geos/geometry.py
@@ -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)
View
26 django/contrib/gis/geos/tests/test_geos.py
@@ -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):

0 comments on commit 3f8f3f8

Please sign in to comment.
Something went wrong with that request. Please try again.