python实现r树存储地理位置_R树--理解平面思维

R树数据结构

备注:参考wiki的内容。

简介

Guttman, A.; “R-trees: a dynamic index structure for spatial searching,” ACM, 1984, 14

R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间存储数据,搜索等问题。

例如:

用手机查找附件商圈的所有餐厅。如果用经纬来记录餐厅的坐标(x,y), 这两个字段储存在数据库中。我们就需要遍历所有的位置信息,然后计算是否满足要求。如果是谷歌地图这种大数据库,遍历就太慢了。

R树解决了这种空间搜索问题。它把B树的思想扩展到多维空间,采用B树分割空间的思想,并在添加、删除操作时采用合并、分解结点的方法,保证树的平衡性。因此,R树就是一棵用来存储高维数据的平衡树。

R树是用来做空间数据存储的树状数据结构。例如给地理位置,矩形和多边形这类多维数据创建索引。

人们发现它在理论和应用方面都非常实用

在现实生活中,R树可以用来存储地图上的空间信息,例如餐馆地址,或者地图上用来构造街道,建筑,湖泊边缘和海岸线的多边形。

然后可以用它来回答“查找距离我2千米以内的博物馆”,“检索距离我2千米以内的所有路段”(然后显示在导航系统中)或者“查找(直线距离)最近的加油站”这类问题。

R树还可以用来加速使用包括大圆距离最邻近搜索

R树的原理

R树的核心思想:

聚合距离相近的节点,并在树结构的上一层将其表示为这些节点的最小限定矩形(minimum bounding Rectangle),这个最小外接矩形就成为上一层的一个节点。

例如,把平面上的R8,R9,R10这三个距离相近的节点,用一个矩形框起来,表示它们位于一个节点R3内,R3就是这3个节点的上层节点。

R树的“R”代表“Rectangle(矩形)”。因为所有节点都在它们的最小外接矩形中,所以跟某个矩形不相交的查询就一定跟这个矩形中的所有节点都不相交。

跟B树类似,R树也是平衡树(所以所有叶子节点都在同一深度)。它把数据按(内存)页存储,是为磁盘存储设计的(跟数据库的做法相同)。

跟其他树结构一样,R树的搜索算法(例如:交集,子集,最邻近搜索)也非常简单。方法是画出查询语句相应的边框,并用它来决定要不要搜索某个子树。

大部分关于R树的研究和改进都是关于如何改进建树的过程。它们可以分为两类࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值