diff options
Diffstat (limited to 'lib/python2.7/site-packages/django/contrib/gis/geos/prepared.py')
-rw-r--r-- | lib/python2.7/site-packages/django/contrib/gis/geos/prepared.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/django/contrib/gis/geos/prepared.py b/lib/python2.7/site-packages/django/contrib/gis/geos/prepared.py new file mode 100644 index 0000000..ae2548f --- /dev/null +++ b/lib/python2.7/site-packages/django/contrib/gis/geos/prepared.py @@ -0,0 +1,35 @@ +from django.contrib.gis.geos.base import GEOSBase +from django.contrib.gis.geos.geometry import GEOSGeometry +from django.contrib.gis.geos.prototypes import prepared as capi + +class PreparedGeometry(GEOSBase): + """ + A geometry that is prepared for performing certain operations. + At the moment this includes the contains covers, and intersects + operations. + """ + ptr_type = capi.PREPGEOM_PTR + + def __init__(self, geom): + # Keeping a reference to the original geometry object to prevent it + # from being garbage collected which could then crash the prepared one + # See #21662 + self._base_geom = geom + if not isinstance(geom, GEOSGeometry): + raise TypeError + self.ptr = capi.geos_prepare(geom.ptr) + + def __del__(self): + if self._ptr: capi.prepared_destroy(self._ptr) + + def contains(self, other): + return capi.prepared_contains(self.ptr, other.ptr) + + def contains_properly(self, other): + return capi.prepared_contains_properly(self.ptr, other.ptr) + + def covers(self, other): + return capi.prepared_covers(self.ptr, other.ptr) + + def intersects(self, other): + return capi.prepared_intersects(self.ptr, other.ptr) |