四叉树 gis java_GIS中四叉树索引及其分类介绍 | 麻辣GIS
正文
1.点四叉树(Point Quadtree)
2.PR四叉树(Point Region Quadtree)
3.MX四叉树
4.基于固定网格划分的四叉树索引
5.线性可排序四叉树索引
在GIS中,四叉树索引又分为很多种类,包括点四叉树、PR四叉树、MX四叉树等,本文这里做一个简单的介绍。
1.点四叉树(Point Quadtree)
点四叉树与KD树相似,两者的差别是在点四叉树中,空间被分割成四个矩形。四个不同的多边形分别是:SW、NW、SE、NE。其搜索过程和KD树相似,当一个点包含在搜索范围内时被记录下来,当一个子树和搜索范围有交叠时它将被穿过。下图:点四叉树示意图
2.PR四叉树(Point Region Quadtree)
PR四叉树是点四叉树的一个变种,它不使用数据集中的点来分割空间。在PR四叉树中,每次分割空间时,都是将一个正方形分成四个相等的子正方形,依次进行,直到每个正方形的内容不超过所给定的桶量(比如一个对象)为止。下图:PR四叉树
3.MX四叉树
空间被分割成四个矩形。四个不同的多边形分别是:SW、NW、SE、NE。每次分割空间时,都是将一个正方形分成四个相等的子正方形,依次进行,直到每个正方形的内容不超过所给定的桶量(比如一个对象)为止。
所有的数据都处在四叉树的同一个深度,多个点可以由一个指针联接。
4.基于固定网格划分的四叉树索引
先看下图:
非叶结点数:MAX_NONLEAFNODE_NUM=∑N−1i=04i
叶结点数:MAX_LEAFNODE_NUM=2^N×2^N=4N
非叶结点从四叉树的根结点开始编号:
从0到MAX_NONLEAFNODE_NUM-1
叶子结点则从MAX_NONLEAFNODE_NUM开始编号,
直到MAX_NONLEAFNODE_NUM+MAX_LEAFNODE_NUM-1
在四叉树中,空间要素标识记录在其外包络矩形所覆盖的每一个叶结点中,但是,当同一父亲的四个兄弟结点都要记录该空间要素标识时,则只将该空间要素标识记录在该父亲结点上,并按这一规则向上层推进。
5.线性可排序四叉树索引
·首先将四叉树分解为二叉树,即在父结点层与子结点层之间插入一层虚结点,虚结点不用来记录空间要素,然后按照中序遍历树的顺序对结点进行编码,包括加入的虚结点。
假设某个结点位于四叉树的第N层,可排序四叉树编码为Index。它的四个子结点位于树的第N-1层,编码从左到右分别为:Index_C1=Index-3×4×(N-1)
Index_C2=Index-4×(N-1)
Index_C3=Index+4×(N-1)
Index_C4=Index+3×4×(N-1)
通过编码值很容易确定结点在树中的层数。在进行查询时,给定一个查询范围,假定为矩形,这个矩形范围唯一的对应一个四叉树结点。通过结点的编码,可以快速计算出在这棵子树下的所有子结点。
找子结点的范围的程序伪代码如下:
GetIndexRange(long Index,long Min,long Max){ long n = GetLayerNum(Index); Min = Max = Index; While(n>0) { Min = Min- 3×4×(n-1); Max = Max-3×4×(n-1); n = n –1;
分享到:
四叉树 gis java_GIS中四叉树索引及其分类介绍 | 麻辣GIS相关推荐
- ES2中关于索引模板的操作
文章目录 前言 一. 创建一个新的索引模板 二. 查看索引模板 1. 查看所有模板 2. 查看指定的模板 3. 模糊匹配 4. 批量查询 三. 删除指定模板 四.修改模板(相当于整体替换,重置) 五. ...
- 地图(Gis)中的坐标系
地图(Gis)中的坐标系 文章目录 地图(Gis)中的坐标系 前言 1.什么是坐标系(地图投影) 1.1坐标系介绍 1.2地理坐标系 1.3投影坐标系 1.4为什么要有这么多坐标系 1.5什么是EPS ...
- 一种高效的基于线性四叉树编码的多级网格索引
目前主流GIS平台厂商的空间数据库引擎,用的基本是四叉树,R树等索引,主要是供海量的空间数据存储和显示用的,以我的理解(我不负责空间数据引擎,了解有限),它们最重要的功能是:传入一个正交查询区域(矩形 ...
- MySQL中索引的分类和基本操作
索引的作用:是用于快速定位实际数据位置的一种机制. 索引在mysql中,是独立于数据的一种特殊的数据结构. 一.索引的分类 普通索引:利用特定的关键字,标识数据记录的位置(磁盘上的位置,盘号,柱面,扇 ...
- java类索引_java中索引的分类,图片详解
java的学习是一个漫长而又循环往复不断上升的过程,今天我们再来看一下java索引的分类,并且通过详细的图片解析. 首先,java中的索引主要分为聚簇索引和非聚簇索引. 其中InnoDB主键使用的是聚 ...
- PostgreSQL中的索引—6(SP-GiST)
目录 SP-GiST 架构 示例:四叉树 内部构件 示例:k维树 内部构件 示例:基数树 内部构件 属性 NULL 其他数据类型 我们已经介绍了Postgresql索引引擎.访问方法接口和三种方法:哈 ...
- postgresql索引_PostgreSQL中的索引— 6(SP-GiST)
postgresql索引 indexing engine, 索引引擎 , the interface of access methods, and three methods: 访问方法的接口以及三种 ...
- mysql5.6 函数索引_聊聊MySQL中的索引
关于MySQL中的索引使用 索引是数据库优化中最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的SQL性能问题. 索引的存储分类: 1.B-Tree索引:最常见的索引类型,大部分引擎都支 ...
- MySQL中的索引详讲
转载自 https://www.cnblogs.com/whgk/p/6179612.html 序言 之前写到MySQL对表的增删改查(查询最为重要)后,就感觉MySQL就差不多学完了,没有想继续学下 ...
- sqlserver中 事物 索引及视图
事务1.什么是事务事务是一个不可分割的工作逻辑单元,它包含了一组数据库的操作命令,并且所有命令作为一个整体一起向系统提交或撤销操作请求,即要么都执行,要么都不执行2.事务的4个属性(1).原子性( ...
最新文章
- linux下Tomcat+OpenSSL配置单向双向认证(自制证书)
- CIKM2021 知识图谱、推荐系统相关论文
- %00截断攻击的探索
- Java面试宝典之开源框架!
- MySQL 常用运算符
- matlab里插入行和列
- C语言实现控制台中光标随意移动
- python 中参数*args, **kwargs
- 通过PHP的Curl函数模拟Post获取内容
- 推荐一个非常好用的进程管理器
- linux fedora frebsd centos linux as 安装出错
- python代码模板
- java微信项目开发教程,Java+微信公众号开发过程步骤详解
- 2019年上半年系统分析师上午真题及答案解析
- 《人月神话》-第19章-20年后的《人月神话》
- 云服务器 架设传奇_怎么架设传奇服务器?
- html5写自我介绍,一分钟标签式自我介绍4篇
- 微信小程序——车牌键盘组件实现
- leetcodeLCP 19. 秋叶收藏集/动态规划
- 免安装版(解压缩版)MySQL安装