R树索引是一种高效的空间索引,它是B树在多维空间的扩展,也是平衡树。R树的结构类似于B+树的平衡树。

R树及其特点

对于一棵M阶的R树,R树中每个非叶子结点都由若干个(p,MBR)数据对组成。MBR(Minimal Boundary Rect)为包含其对应孩子的最小边界矩形。这个最小外接矩形是个广义上的概念,二维上是矩形,三维空间上就是长方体MBV(Minimum Bounding Volume),以此类推到高维空间。p是指向其对应该子结点的指针。

叶子结点则是由若干个(OI,MBR)组成,其中MBR为包含对应的空间对象的最小外接矩形。OI是空间对象的标号,通过该标号可以得到对应空间对象的详细的信息。

R树查找

伪代码如下:

Algorithm R_Search(N,W) {

/*在根结点为N的R树中查找所有与W相交的数据矩形*/

if (N.LEVEL==0) //N是叶子结点

// Return all data rectangles that intersect with W;

else //N不是叶子结点

for (i=1;i

if (N.MBRi;Intersect with W)

R_Search (N.pi,W);

}

R树插入

伪代码如下:

Algorithm R_Insert(N,P){

/*向根结点为N的R树中插入数据矩形P*/

if (N.LEVEL==0) {

Insert P into N;

if (N overfill) Split N;

}

else {//N是中间结点

// Choose the entry in N whose rectangle needs

// least area enlargement to include the new data rectangle.

// Resolve ties by choosing the entry with the rectangle of

// smallest area (Let's suppose it's entry is the answer)

R_Insert(N.pi,P);

// Adjust N.MBRi to enclose all rectangle in its child node;

}

}

R树删除

伪代码如下:

Algorithm R_Delete(N,P){

/*从根结点为N的R树中删除数据矩形P*/

if (N:LEVEL==0)

{//N是叶结点

if (N包含P)

{

// 从N中删除P

N.COUNT=N.COUNT-1;

return true;

}

else

return false;

}

else

{

for (i =1;i

if (N.MBRi intersects with P)

if (R_Delete(N.pi,P))

if (N.pi,COUNT=m)

// Adjust N.MBRi to enclose all child's rectangles;

else

{

// Reinsert all remain entries of N.pi and delete N.pi;

// if N underfilled, Reinsert alI

// remain entries of it and

// delete it too...;〗

}

}

}

地图对应的R树结构

mysql 索引 r树_GIS空间数据库(16)R树索引相关推荐

  1. mysql的R树_GIS笔记——R树:一种用于空间查找的动态索引结构(算是节译)

    R树简介. R树是一种与B树类似的高度平衡树.这种索引是动态的,不需要定期重建.索引记录(Index Records)保存在叶节点中,索引记录包含指向数据对象的指针.注意原文中将索引的终端称为索引记录 ...

  2. 深入原理64式:16 B树,B+树与mysql索引

    1 B树 1.1 基础知识 含义: 多路平衡查找树 阶: B树中所有结点的孩子结点数的最大值,用m表示 特点: 1) 树的每个结点至多有m棵子树(m-1个关键字) 2) 若根结点不是终端结点,则至少有 ...

  3. 面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://dwz.cn/exC8JdQS InnoDB的一棵B+树可以存放多少行数 ...

  4. 为什么 MySQL的常用引擎都默认使用 B+ 树作为索引?

    一.前言 为了讲清楚这个问题,阿粉先带大家了解一下什么是索引. 我记得刚刚学习数据库的时候,老师喜欢用书本的目录来类比数据库的索引,并告诉我们索引能够像目录一样,让我们更快地找到想要找到的数据. 如果 ...

  5. R语言构建xgboost模型:使用xgboost的第一颗树(前N颗树)进行预测推理或者使用全部树进行预测推理、比较误分类率指标

    R语言构建xgboost模型:使用xgboost的第一颗树(前N颗树)进行预测推理或者使用全部树进行预测推理.比较误分类率指标 目录

  6. r roc函数_一棵树专栏 | ROC分析时一定要告诉R分析谁

    两个知名R包产生的矛盾嗨!大家好,我是一棵树,这是我第一次在解螺旋发文,还是蛮激动的.下面就开始吧!今天的主题是:ROC分析时一定要告诉R分析谁 用到的软件是:R语言 用到的R包是:pROC和ROCi ...

  7. 索引体积_第16期:索引设计(MySQL 的索引结构)

    上一章讲了数据库基本上都用 B+ 树来存储索引的原因:适合磁盘存储,能够充分利用多叉平衡树的特性,磁盘预读,并且很好的支持等值,范围,顺序扫描等.这篇主要介绍 MySQL 两种常用引擎,MyISAM ...

  8. r语言 col_R语言绘制聚类树示例

    R语言绘制聚类树示例层次聚类(hierarchical clustering)常见两种形式,"自底向上"的聚合策略(层次聚合)或"自顶向下"的分拆策略(层次分划 ...

  9. 【华为笔试】输入:A={11,13,15},B={12,14,16},R=1

    前两天做华为的题,结果太菜,当天结束后,把第一题自己终于做出来了. 我要吐槽一下华为,笔试前一个半小时通知笔试,还和我小米笔试冲突了,结果还做的不好. 第一道题: 输入字符串:A={1,3,5},B= ...

  10. MySQL的存储引擎InnoDB选择了B+ 树

    我们知道数据的存储和检索是两个很重要的功能,当我们的数据量大了,怎么能快速的检索数据呢,答案是使用索引,可索引具体的技术实现有很多,选择哪一种呢,我就以mysql为例记录下它为什么选择了B+树作为索引 ...

最新文章

  1. androidx FloatingActionButton 中间加载的图片显示黑色
  2. Ext JS图书风暴来袭!
  3. docker 分布式 lnmp 镜像制作
  4. 按主键更新另一个表oracle,SQL根据ID匹配从一个表更新到另一个表
  5. C\C++不经意间留下的知识空白------const使用
  6. centos桌面系统使用记录
  7. thinkphp6 加载第三方类库_thinkphp中第三方类引入问题
  8. 2010年中兴面试题
  9. Selenium下载页面上的图片
  10. office2016 64位下载链接
  11. matlab设置图片背景透明_MATLAB设置图片背景透明,和设定大小,适合论文中使用...
  12. exp oracle 904,9i exp时出现ORA-904、ORA-1003的解决过程
  13. 协方差矩阵的定义性质与python实现
  14. 怎么电脑计算机管理员去掉,电脑每次运行程序都要管理员身份怎么办?
  15. 写一篇讲解优芽动画知识的教案
  16. “旅行青蛙”游戏外挂藏风险 苹果:或至个人ID泄露
  17. JDBC基础操作汇总
  18. 关于Qt4K高分屏自适应问题
  19. NVIDIA显卡驱动及CUDA相关安装流程(包括多版本cuda切换)
  20. 二十一世纪“新元宇宙”奇幻小说作品系列连载

热门文章

  1. 数据--第47课 - 查找的概念
  2. .Net转Java自学之路—基础巩固篇二十二(XML)
  3. SpringMVC (三)处理器映射器的配置和AbstractController的使用
  4. 5.26. sysvmsg
  5. Linux 和 Windows 下实现多进程的方式以及管道操作
  6. OSPF 常见错误与排查方法
  7. MSSQL 同步两个数据库的示例
  8. StackExchange.Redis学习笔记(三) 数据库及密码配置 GetServer函数
  9. HDU 2014 - 青年歌手大奖赛_评委会打分
  10. python日记----2017.7.20