安装https://www.cnblogs.com/mangmangbiluo/p/10954836.html
rtree可以看做是二维或者多维空间中的b树
如果不知道b树的建议先去看看b树
rtree的原理https://blog.csdn.net/xiaofengcanyuexj/article/details/41912169
https://blog.csdn.net/houzuoxin/article/details/16113895
两篇文章相同的
Python rtree官方文档
http://toblerity.org/rtree/index.html#
rtree中的基本单位是一个个小的矩形
在这个库中是一个类: rtree.index.Item
我这里主要写一下Pythonrtree的使用
初始化对象
from rtree import index idx = index.Index()
插入数据: insert(self, id, coordinates, obj=None), 没有返回值
其中id是一个长整数,coordinates 是形如(xmin, ymin, xmax. ymax)的元组或者列表也可以,都是double类型的浮点数,和python的float相对应(python只有float,相当于c++中的double)
obj是可选的选项,可以是任意的一个Python对象,实际原理就是先将Python对象序列化以后再存储起来
idx.insert(0,(0,0,1,1), obj={1:4})
add方法和insert方法完全一样
In [226]: ctypes.c_double(10.0/3) Out[226]: c_double(3.3333333333333335) In [227]: 10.0/3 Out[227]: 3.3333333333333335
大家看,c_double和python的float是相一致的,尽管放心
删除数据: delete(self, id, coordinates); 没有返回值
idx.delete(0,(0,0,1,1))
这个函数既需要id,又需要坐标值
如果没有目标点满足,不会报错,,也不会删除
如果有多个目标点满足的话,仅会删除一个(目测和插入顺序相关,但是请避免这种事情的发生)
查找区域内的元素intersection(self, coordinates, objects=False): 返回是一个生成器
In [243]: list(c.intersection((0,0,2,2), objects=False)) Out[243]: [0, 0, 1] In [244]: list(c.intersection((0,0,2,2), objects=True)) Out[244]: [<rtree.index.Item at 0x7f6ffc60b8e8>, <rtree.index.Item at 0x7f6ffc60b3c0>, <rtree.index.Item at 0x7f6ffc60b628>] In [245]: list(c.intersection((0,0,2,2), objects=<