mirror of https://github.com/django/django.git
`OGRGeometry` objects may now be pickled.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12303 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
25f47bbbb6
commit
b0d218e9e2
|
@ -130,6 +130,26 @@ class OGRGeometry(GDALBase):
|
||||||
# Setting the class depending upon the OGR Geometry Type
|
# Setting the class depending upon the OGR Geometry Type
|
||||||
self.__class__ = GEO_CLASSES[self.geom_type.num]
|
self.__class__ = GEO_CLASSES[self.geom_type.num]
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
"Deletes this Geometry."
|
||||||
|
if self._ptr: capi.destroy_geom(self._ptr)
|
||||||
|
|
||||||
|
# Pickle routines
|
||||||
|
def __getstate__(self):
|
||||||
|
srs = self.srs
|
||||||
|
if srs:
|
||||||
|
srs = srs.wkt
|
||||||
|
else:
|
||||||
|
srs = None
|
||||||
|
return str(self.wkb), srs
|
||||||
|
|
||||||
|
def __setstate__(self, state):
|
||||||
|
wkb, srs = state
|
||||||
|
ptr = capi.from_wkb(wkb, None, byref(c_void_p()), len(wkb))
|
||||||
|
if not ptr: raise OGRException('Invalid OGRGeometry loaded from pickled state.')
|
||||||
|
self.ptr = ptr
|
||||||
|
self.srs = srs
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_bbox(cls, bbox):
|
def from_bbox(cls, bbox):
|
||||||
"Constructs a Polygon from a bounding box (4-tuple)."
|
"Constructs a Polygon from a bounding box (4-tuple)."
|
||||||
|
@ -137,10 +157,6 @@ class OGRGeometry(GDALBase):
|
||||||
return OGRGeometry( 'POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))' % (
|
return OGRGeometry( 'POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))' % (
|
||||||
x0, y0, x0, y1, x1, y1, x1, y0, x0, y0) )
|
x0, y0, x0, y1, x1, y1, x1, y0, x0, y0) )
|
||||||
|
|
||||||
def __del__(self):
|
|
||||||
"Deletes this Geometry."
|
|
||||||
if self._ptr: capi.destroy_geom(self._ptr)
|
|
||||||
|
|
||||||
### Geometry set-like operations ###
|
### Geometry set-like operations ###
|
||||||
# g = g1 | g2
|
# g = g1 | g2
|
||||||
def __or__(self, other):
|
def __or__(self, other):
|
||||||
|
|
|
@ -447,6 +447,16 @@ class OGRGeomTest(unittest.TestCase):
|
||||||
self.assertEqual([1.0, 2.0, 3.0], ls_25d.z)
|
self.assertEqual([1.0, 2.0, 3.0], ls_25d.z)
|
||||||
self.assertEqual(3, ls_25d.coord_dim)
|
self.assertEqual(3, ls_25d.coord_dim)
|
||||||
|
|
||||||
|
def test17_pickle(self):
|
||||||
|
"Testing pickle support."
|
||||||
|
import cPickle
|
||||||
|
g1 = OGRGeometry('LINESTRING(1 1 1,2 2 2,3 3 3)', 'WGS84')
|
||||||
|
g2 = cPickle.loads(cPickle.dumps(g1))
|
||||||
|
self.assertEqual(g1, g2)
|
||||||
|
self.assertEqual(4326, g2.srs.srid)
|
||||||
|
self.assertEqual(g1.srs.wkt, g2.srs.wkt)
|
||||||
|
|
||||||
|
|
||||||
def suite():
|
def suite():
|
||||||
s = unittest.TestSuite()
|
s = unittest.TestSuite()
|
||||||
s.addTest(unittest.makeSuite(OGRGeomTest))
|
s.addTest(unittest.makeSuite(OGRGeomTest))
|
||||||
|
|
Loading…
Reference in New Issue