python实现r树存储地理位置_R树详解 - _yanghh - 博客园

$B$ 树的搜索本质上是一维区间的划分过程,每次搜索节点所找到的子节点其实就是一个子区间。$R$ 树是把 $B$ 树的思想扩展到了多维空间,

采用了 $B$ 树分割空间的思想,是一棵用来存储高维数据的平衡树。

对于一棵 $R$ 树,叶子节点所在层次称为 $Level \; 1$,根节点所在层次称为 $Level \; h$。一棵 $R$ 树满足如下性质:

1)除根结点之外,所有非根结点包含有 $m$ 至 $M$ 个记录索引(条目)。根结点的记录个数可以少于 $m$。通常 $m=\frac{M}{2}$。

2)每一个非叶子结点的分支数和该节点内的条目数相同,一个条目对应一个分支。所有叶子结点都位于同一层,因此 $R$ 树为平衡树。

3)叶子结点的每一个条目表示一个点。

4)非叶结点的每一个条目存放的数据结构为:$(I, child-pointer)$。$child-pointer$ 是指向该条目对应孩子结点的指针。$I$ 表示

一个 $n$ 维空间中的最小边界矩形($minimum \; bounding \; rectangle$,即 $MBR$),$I$ 覆盖了该条目对应子树中所有的矩形或点。

两个黑点保存在一个叶子节点的两个条目中,恰好框住这两个条目的矩形表示为:$I=(I_0,I_1)$。其中 $I_0=(a,b),I_1=(c,d)$,也就

是说最小边界矩形是用各个维度的边来表示,在三维空间中那就是立方体,用 $3$ 条边就可以表示了。

下面构建一棵 $R$ 树。如下左图,理论上,点可以任意组合成叶节点,只要 $MBR$ 包含它子树中的所有点。特别是 $MBR$ 可以重叠。下面

右图是另一种组合建立的 $R$ 树。

   

哪种分组更好呢?一般分组的原则就是最小化每个 $MBR$ 矩形,这样查询的时候发生的相交情况会越少,查询的分支就越少,查询效率越高。

R-tree 查询

介绍查询之前,需要先了解下:如何判断两个线段或者两个矩形是否相交?

1. Range Query

这种查询输入的是一个矩形所表示的范围,要求输出该范围内的所有点。从根节点开始,通过判断目标矩形和节点内的每一个条目对应的

矩形是否相交来选择下一步查询的节点,如果有多个条目都相交,那对应的各个分支都得查。到达叶子节点后,就判断该叶子节点的每一

个条目是否在查询区域内即可。

现在想查询在矩形

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值