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

class RtreeCase():
def __init__(self):
self.p = index.Property()
self.p.dimension = 3
self.p.dat_extension = 'data'
self.p.idx_extension = 'index'
self.idx3d = index.Index(‘case’,properties=self.p)
self.idx3d.insert(1, (0, 60, 23))
self.idx3d.insert(2, (0, 60, 24))
self.idx3d.insert(3, (0, 60, 25))
self.idx3d.insert(4, (0, 60, 26))
self.idx3d.insert(5, (0, 60, 27)) def handle(self,width,num):
res=list(self.idx3d.nearest(width,num))
return res
 
  def main():
  ass=RtreeCase()
  print(ass.handle((0,60,25),3))
  print(ass.handle((0,60,1),2))   if __name__ == '__main__':
  main()

  在上面实例中,通过rtree.index.Property.dimension = 3确定index的属性为三维数据,通过rtree.index.Index.insert()来插入数据,insert方法中需要传递俩个参数,第一个为一个长整数,表示这条数据的id,
但这里的id可以重复。第二个参数是一个元祖表示数据的位置。所有函数的坐标排序对索引的交错数据成员都很敏感 。如果 interleaved为False,则坐标必须采用[xmin,xmax,ymin,ymax,...,...,kmin,kmax]的形式。
如果 interleaved为True,则坐标必须采用[xmin,ymin,...,kmin,xmax,ymax,...,kmax]的形式。
  插入一个点,即left == right && top == bottom,将基本上将单个点条目插入到索引中,而不是复制额外的坐标并插入它们。但是,没有明确插入单个点的快捷方式。
  rtree.index.Index()是创建一个rtree实例,可以传俩个参数,第一个参数是字符型表示生成的索引文件的名称,第二个参数为properties=P,表示将rtree.index.Property定义的属性
传递给index对象。
  rtree.index.nearest()可以获取离目标点位距离最近的几条数据,该方法有俩个参数,第一个参数是输入一个元祖即目标的坐标。第二个参数是一个整型,表示要返回几个坐标。例如如果第二个参数为1时
只会返回离他最近的一条数据的id,没错返回的是插入时输入的第一个参数。但当离他最近的数据有多条时,这些数据都会被返回,哪怕你设置的第二个参数为1。
第一次运行的结果为:

找出了对应的数据id,并且生成了索引文件。但如果重新执行一遍会发现输出结果为:

  天啊!一样的代码,为何结果不一样?造成这个结果的罪魁祸首是第一次生成的索引文件,默认情况下,如果文件系统中已存在上述示例中具有给定名称rtree的索引文件,则它将以追加模式打开而不能重新创建。可以使用可以赋予rtree.index.Index构造函数的index属性的rtree.index.Property.overwrite属性来控制此行为 。

  当然也可以在创建index实例时,第一个参数即字符型索引文件名称那个不写,就不会生成索引文件了,自然也就不会造成结果的追加。

python rtree包查找三维空间下的最近设备的更多相关文章

  1. windows环境下安装Python的Rtree包

    Rtree包是基于libspatialindex开发的,在安装Rtree之前必须先安装libspatialindex.关于libspatialindex,除了官网的英文外,这里有一个中文翻译过来的介绍 ...

  2. python 在内网windows环境下pip三方包

    我没用过Linux环境. 一般情况下,内网安装三方包,只需要在pypi找到对应python版本(2.7,3.6,...),系统位数(32位,64位)的whl包,cmd命令行cd进入相关目录,pip i ...

  3. linux和windows下安装python拓展包及requirement.txt安装类库

    python拓展包安装 直接安装拓展包默认路径: Unix(Linux)默认路径:/usr/local/lib/pythonX.Y/site-packagesWindows默认路径:C:\Python ...

  4. Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包

    联网情况下在命令终端CMD中输入“pip install numpy”即可自动安装,pandas和matplotlib同理一样方法进行自动安装. 工作的电脑不能上外网,所以不能通过直接输入pip命令来 ...

  5. (转载)Linux平台下安装 python 模块包

    https://blog.csdn.net/aiwangtingyun/article/details/79121145 一.安装Python Windows平台下: 进入Python官网下载页面下载 ...

  6. 利用 pip 安装 Python 程序包到个人用户文件夹下

    利用 --user 参数,即 pip install --user package_name 这样会将Python 程序包安装到 $HOME/.local 路径下,其中包含三个字文件夹:bin,lib ...

  7. python机器学习包 Windows下 pip安装 scikit-learn numpy scipy

    1.到PIP的目录中C:\Python34\Scripts;2. 2.1  pip安装numpy pip install numpy 2.2  pip安装sklearn pip install -U ...

  8. Python接口测试实战5(下) - RESTful、Web Service及Mock Server

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  9. Python自定义包引入【新手必学】

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:sys_song python中的Module是比较重要的概念.常见的情 ...

随机推荐

  1. sublime Text 正则表达式功能使用介绍

    sublime Text 正则表达式功能使用介绍 1.打开sublime Text ,然后按 CTRL+H打开替换面板 2.如下图,勾选正则表达式功能,然后填上正则表达式和替换内容. 3.替换后结果如 ...

  2. Linux脚本shell字符串处理

    Linux脚本shell字符串处理,基本都有了,看着搜吧 TLDP教堂 shell中if条件字符串.数字比对,[[ ]]和[ ]区别 Linux 之 shell 比较运算符 Linux Shell编程 ...

  3. D6差分及树上差分

    原谅我这篇博客拖了很久才写: 来到学校就和白痴一样缺了一世纪的课 上课特别懵:还有开学考枯了: 差分有列的差分,对于一段区间[l,r]进行修改,显然如果我们对于他的差分数组的l和r+1进行修改就可以了 ...

  4. WinForm动态查询

    WinForm 动态查询 1. 使用场景 在对数据进行筛选, 包含多个筛选字段时适用. 2. 接口设计 /// <summary> /// 定义可作为追加到 WHERE 子句的控件接口 / ...

  5. HAOI 2018 染色(容斥+NTT)

    题意 https://loj.ac/problem/2527 思路 设 \(f(k)\) 为强制选择 \(k\) 个颜色出现 \(s\) 种,其余任取的方案数. 则有 \[ f(k)={m\choos ...

  6. Centos7初始化脚本

    今天分享一个自己写的一个初始化的小脚本. 编写初始化系统要考虑到系统的版本问题,现在用的比较多的就是centos6和centos7,所以首先要判断一下系统的版本. cat /etc/redhat-re ...

  7. Redis出现的问题

    1):Could not connect to Redis at 127.0.0.1:6379: Connection refused 分析: 1-1:虚拟机中的 6379 端口可能没有开启 查看虚拟 ...

  8. TypeScript作业

    题目: 了解神话故事盘古开天辟地或者女娲开世造物,通过typescript程序模拟出天地的变化过程或者万物的衍生过程 参考博客园大神: https://www.cnblogs.com/tansm/p/ ...

  9. leecode第二百一十五题(数组中的第K个最大元素)

    class Solution { public: int quick_sort_version(vector<int>& nums, int k,int begin,int end ...

  10. pytest文档14-函数传参和firture传参数request

    前言 为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数. 比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行. ...