python 空间索引包
Python有很多用于空间索引的包,其中最经常使用的是Rtree、geohash、PyQuadTree。
Rtree是基于C的库,但是也有Python接口。它提供了通过一个范围查询空间数据的能力,例如查询所有落在一个矩形中的点。它支持区别类型的空间索引,如R树、R*树和Hilbert树,因此能够以区别方式组织数据以提高查询性能。
from rtree import index
p = index.Property()
p.dimension = 2
idx = index.Index(properties=p)
idx.insert(1, (0, 0, 1, 1))
idx.insert(2, (0, 1, 2, 2))
list(idx.intersection((⑴, ⑴, 1.5, 1.5)))
# returns [1]
geohash根据地理经纬度将地图分成很多小块,所以查询点会不会落在一个区域中线性扫描地图的时间很短。geohash的缺点在于,其他类型的查询不那末方便(例如,查询一个多边形内的点)。
import geohash
lat, lon = 37.4219999, ⑴22.0840575
box = geohash.bbox('9q8z')
print(box)
# returns (37.421875, ⑴22.08740234375, 37.4359130859375, ⑴22.0733642578125)
print(geohash.distance(lat, lon, '9q8z'))
# returns 37.18824958370098
PyQuadTree允许将点、线和多边形等数据存储在四叉树中。它适用于各种类型的查询,例如查询多边形内的所有点或查询一定距离内的点。
from pyqtree import Index
index = Index(bbox=[0, 0, 100, 100])
index.insert(1, (25, 25, 30, 30))
index.insert(2, (75, 75, 80, 80))
results = index.intersect((0, 0, 50, 50))
# returns [(1, [25, 25, 30, 30])]
不管您正在构建地图利用或者处理地理数据,Python的空间索引包可让您更轻松地组织和查询数据。
文章来源:丸子建站
文章标题:python 空间索引包
https://www.wanzijz.com/view/85562.html