【649】shapely strtree STRtree 构建 RTree
class strtree.STRtree(geometries)
- STRtree构造函数采用一系列几何对象, 几何对象的引用将保留并存储在R-tree中
- strtree.query(geom)
- 返回strtree中所有几何体的外延与geom的外延相交的几何体的列表
- 后续使用所需的二进制谓语(intersects相交、crosses交叉、contains包含、overlaps重叠)对返回的子集进行搜索,可能需要根据特定的空间关系进一步筛选结果
>>> from shapely.strtree import STRtree >>> points = [Point(i, i) for i in range(10)] >>> tree = STRtree(points) >>> query_geom = Point(2,2).buffer(0.99) >>> [o.wkt for o in tree.query(query_geom)] ['POINT (2 2)'] >>> query_geom = Point(2, 2).buffer(1.0) >>> [o.wkt for o in tree.query(query_geom)] ['POINT (1 1)', 'POINT (2 2)', 'POINT (3 3)'] >>> [o.wkt for o in tree.query(query_geom) if o.intersects(query_geom)] ['POINT (2 2)']
- 获取查询结果的原始索引,需要创建一个辅助字典,使用几何ID作为键,因为形状几何本身不可哈希
>>> index_by_id = dict((id(pt), i) for i, pt in enumerate(points)) >>> [(index_by_id[id(pt)], pt.wkt) for pt in tree.query(Point(2,2).buffer(1.0))] [(1, 'POINT (1 1)'), (2, 'POINT (2 2)'), (3, 'POINT (3 3)')]
- strtree.nearest(geom)
返回在strtree中离geom最近的对象
>>> tree = STRtree([Point(i, i) for i in range(10)]) >>> tree.nearest(Point(2.2, 2.2)).wkt 'Point (2 2)'
说明:计算的时候是通过外接矩形,因此可以召回的多边形会更多
浙公网安备 33010602011771号