initial commit
This commit is contained in:
77
billinglayer/python/shapely/prepared.py
Normal file
77
billinglayer/python/shapely/prepared.py
Normal file
@@ -0,0 +1,77 @@
|
||||
"""
|
||||
Support for GEOS prepared geometry operations.
|
||||
"""
|
||||
from pickle import PicklingError
|
||||
|
||||
import shapely
|
||||
|
||||
|
||||
class PreparedGeometry:
|
||||
"""
|
||||
A geometry prepared for efficient comparison to a set of other geometries.
|
||||
|
||||
Example:
|
||||
|
||||
>>> from shapely.geometry import Point, Polygon
|
||||
>>> triangle = Polygon([(0.0, 0.0), (1.0, 1.0), (1.0, -1.0)])
|
||||
>>> p = prep(triangle)
|
||||
>>> p.intersects(Point(0.5, 0.5))
|
||||
True
|
||||
"""
|
||||
|
||||
def __init__(self, context):
|
||||
if isinstance(context, PreparedGeometry):
|
||||
self.context = context.context
|
||||
else:
|
||||
shapely.prepare(context)
|
||||
self.context = context
|
||||
self.prepared = True
|
||||
|
||||
def contains(self, other):
|
||||
"""Returns True if the geometry contains the other, else False"""
|
||||
return self.context.contains(other)
|
||||
|
||||
def contains_properly(self, other):
|
||||
"""Returns True if the geometry properly contains the other, else False"""
|
||||
# TODO temporary hack until shapely exposes contains properly as predicate function
|
||||
from shapely import STRtree
|
||||
|
||||
tree = STRtree([other])
|
||||
idx = tree.query(self.context, predicate="contains_properly")
|
||||
return bool(len(idx))
|
||||
|
||||
def covers(self, other):
|
||||
"""Returns True if the geometry covers the other, else False"""
|
||||
return self.context.covers(other)
|
||||
|
||||
def crosses(self, other):
|
||||
"""Returns True if the geometries cross, else False"""
|
||||
return self.context.crosses(other)
|
||||
|
||||
def disjoint(self, other):
|
||||
"""Returns True if geometries are disjoint, else False"""
|
||||
return self.context.disjoint(other)
|
||||
|
||||
def intersects(self, other):
|
||||
"""Returns True if geometries intersect, else False"""
|
||||
return self.context.intersects(other)
|
||||
|
||||
def overlaps(self, other):
|
||||
"""Returns True if geometries overlap, else False"""
|
||||
return self.context.overlaps(other)
|
||||
|
||||
def touches(self, other):
|
||||
"""Returns True if geometries touch, else False"""
|
||||
return self.context.touches(other)
|
||||
|
||||
def within(self, other):
|
||||
"""Returns True if geometry is within the other, else False"""
|
||||
return self.context.within(other)
|
||||
|
||||
def __reduce__(self):
|
||||
raise PicklingError("Prepared geometries cannot be pickled.")
|
||||
|
||||
|
||||
def prep(ob):
|
||||
"""Creates and returns a prepared geometric object."""
|
||||
return PreparedGeometry(ob)
|
||||
Reference in New Issue
Block a user