alex_bn_lee

导航

【649】shapely strtree STRtree 构建 RTree

class strtree.STRtree(geometries)

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)'

 

  说明:计算的时候是通过外接矩形,因此可以召回的多边形会更多

 

posted on 2021-08-17 20:25  McDelfino  阅读(2477)  评论(0)    收藏  举报