summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/django/contrib/gis/geos/prepared.py
diff options
context:
space:
mode:
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.py35
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)