博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python rtree包查找三维空间下的最近设备
阅读量:5874 次
发布时间:2019-06-19

本文共 2013 字,大约阅读时间需要 6 分钟。

hot3.png

 

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的索引文件,则它将以追加模式打开而不能重新创建。可以使用可以赋予构造函数的index属性的属性来控制此行为 。

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

转载于:https://my.oschina.net/u/3892643/blog/2252627

你可能感兴趣的文章
Kubernetes 1.9集群使用traefik发布服务
查看>>
如何在C++中增加给JavaScript调用的API
查看>>
大道至减
查看>>
通过Job,Trigger,Scheduler看Quartz2.x作业调度框架
查看>>
VMware上海谈新云基础架构管理平台价值
查看>>
“二子乘舟”的故事很难讲
查看>>
Global Industry Analysts称全球MSS市场在2017年达到112亿美元
查看>>
XCode编译运行出错解决思路,以及再次推荐AppCode
查看>>
京东和天猫的差异究竟在哪里?
查看>>
恐慌:微商造就了“伪创业”迷局
查看>>
学习:Intents和Intent Filters(实例部分)
查看>>
10个让人眼花缭乱的HTML5和JavaScript效果
查看>>
C语言易混淆关键词详解-const, static, extern, typedef, 声明
查看>>
Redhat Linux从入门到略懂
查看>>
int ,long , long long类型的范围
查看>>
为VM增加磁盘空间
查看>>
OpenCV和PHP的人脸识别技术
查看>>
System.Data.SQLite数据库简介
查看>>
android自带的示例程序 BluetoothChat 变蓝牙串口助手
查看>>
[转]eclipse中的两种Jre 及 Jre与Jdk的区别+[原创]在Myeclipse中配置Javadoc的方法
查看>>