Python:Rtree安转和使⽤
⽂章⽬录
Install
Linux
Linux在安装python库Rtree时, pip install Rtree,会提⽰未定义符号,因为电脑缺少必要的C库。
mkdir build
cd build
cmake ..
make
make install
这个时候就安转成功依赖库了;再次pip install Rtree 就可以了。
如果是⾮root⽤户,建议在make install 的时候⾃定义⼀个路径,因为/usr/local你没有权限写⼊,参考这样make DESTDIR=/install/directory install ,其中Destdir 填写你的指定⽬录,但是这样安转以后,需要⾃⼰修改环境变量,以便可以到库
翻阅Rtree的源⽂件,我们发现它在加载spatialindex时,其实是通过这个环境变量SPATIALINDEX_C_LIBRARY加载的,我们直接定义这个环境变量为 你指定安装的⽬录即可;
vim ~/.bashrc
export SPATIALINDEX_C_LIBRARY = /home/linuxbrew/.linuxbrew/Cellar/spatialindex
source ~/.bashrc
然后再次pip install Rtree就可以了
Mac
直接 brew install spatialindex即可安转依赖库,Linux下也有相应的LinuxBrew,使⽤⽅法和Mac⼀致,具体可以参考这个
⽰例
Rtree 是⼀个 ctypes 的python包装 libspatialindex ,这为空间感兴趣的Python⽤户提供了许多⾼级空间索引功能。这些功能包括:最近邻搜索
交叉点搜索
多维指标
聚集索引(直接⽤索引项存储python pickle)
散装装载
删除
磁盘序列化
⾃定义存储实现(例如,在zodb中实现空间索引)
参考⾃:
⽂档有点久,很多API都更新了
rtree模块有2个常⽤的类:rtree.index.Index和rtree.index.Property。其中rtree.index.Index⽤于进⾏数据操作,rtree.index.Property⽤于对index进⾏属性的设定。
当⽤rtree包进⾏三维及以上的维度索引数据到磁盘时会创建俩个索引⽂件,Rtree默认使⽤扩展名dat和idx。可以使
⽤rtree.index.Property.dat_extension和rtree.index.Property.idx_extension来控制索引⽂件的扩展名。其中.idx是索引⽂件,.dat是数据⽂件from rtree import index
# 主要使⽤ rtree.index.Index 和 rtree.index.Property . ⽤户操纵这些类与索引交互。
python怎么读取dat文件
# 构建 RTree 实例对象
idx = index.Index()
# 插⼊索引 insert(id, coordinates, obj=None):
# 其中coordinates为坐标顺序,按照 [xmin, xmax, ymin, ymax,…,……、kmin kmax]
left, bottom, right, top =(0.0,0.0,1.0,1.0)
idx.insert(0,(left, bottom, right, top))
# 查询索引
# 查询索引有三种主要⽅法。:
# 1. 交叉  rtree.index.Index.intersection() 给定⼀个窗⼝,返回包含该窗⼝的ID
list(idx.intersection((1.0,1.0,2.0,2.0)))
# 2. 最近邻
# 给定界限最近的1个项。如果多个项⽬与边界的距离相等,则返回两个项⽬,⾃定义想要寻的最近邻个数
arest((1.0000001,1.0000001,2.0,2.0),1))
使⽤实例
from rtree import index
class MyIndex():
def__init__(self,idx):
self.id= idx
class Rtree():
def__init__(self):
self.p = index.Property()
self.p.dimension =4# 设置使⽤的维度数 (对于地图)
self.p.dat_extension ='data'# 设置存储的后缀名
self.p.idx_extension ='index'# 设置存储的后缀名
## interleaved=False时,bbox must be [xmin, xmax, ymin, ymax,…,……、kmin kmax]
< = index.Index('case',interleaved=False,property=self.p,overwrite=False)
# objects == True 时,返回包括obj在内的数据,否则只返回⽬标 id
def get_nearby_obj(self,width,num):
res=nearest(width,num,objects=True))
return res
def main():
ass=Rtree()
hits = _nearby_obj((0,0,5,5),3)
for x in hits:
print(x.id,'\t',x.object.__dict__)
hits = _nearby_obj((0,0,1,1),2)
for x in hits:
print(x.id,'\t',x.object.__dict__)
main()
index.Index('case',overwrite=True) 第⼀个参数表⽰ 存储到⽂件中,会⽣成case.dat 和 case.idx两个⽂件,overwrite表⽰是否覆盖之前的数据,如果为false,那么新插⼊的数据会追加到之前的⽂件中;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。