GIS是怎样建成的之三:图形,图形,我们去哪里呀(区域树部分)
2014-03-16 20:21
134 查看
前面的一篇我们讨论了第一种空间索引——四叉树。作为二叉排序树在二维空间的推广,四叉树是一种非常直观有效的结构。但同样,它也带来了二叉排序树的毛病,那就是当索引对象极端时,它的查找的时间复杂度会退化成线性也就是O(n)。那在一维空间我们怎么办呢?科学家发明了一种始终维护二叉树平衡的树,即左右子树之差不超过一,顾名思义,平衡二叉树。那么平衡二叉树能不能再二维空间中推广呢。类比二叉排序树这样简单推广是不可能了,所以产生了一种新的数据结构叫区域树。
其实所谓的区域树思路非常简单,它的原理就是对各个Envelope进行排序,然后以它们为叶节点逐层向上建树,这样建立的树是严格平衡的,它的分支节点的Envelope为子节点Envelope的并。好了,那怎么排呢,每个索引对象的Envelope有一个四维参数,即x,y,width,height。如果排序,只能使用其中一个指标,或者几个指标的组合进行评价。NTS实现了这种数据结构。NTS对它的描述是一种只可以查询的R树,但对照了R树和区域树的定义的差别,NTS里面实现的这种结构与区域树更为接近,至于是否属实还有待进一步学习。对其的操作分别可以对X,Y进行排序,对X和Y的分别查询的时间复杂度为O(logn+k),然后对其查找出的节点进行匹配,最终得到的时间复杂度为log^2+k。,同时它的空间复杂度上升到了O(nlogn)。
NTS对这种区域树的实现基本也就到此为止了。但翻阅计算几何书时,发现时间复杂度还是可以再降的,将到我们觉着不可思议,可以达到O(logn+k)。这种技术叫分散层叠。这种技术的核心思想就是在对X排序生成的区域树之后,不建立第二棵Y区域树。而是建立另一种树结构,它是针对X结构的树的存储,构造结构相同的一棵树,每棵树的节点存的是该节点子节点的Y排序,层与层之间的元素,通过指针指向不小于其的最小元素。如下图所示。有时间Happy
kaikai计划在NTS的基础上实现分成散叠技术,也算是做一个实践吧。
![](http://img.blog.csdn.net/20140316201433812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FpeGluODk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
连讲了两篇空间索引,这绝对不是索引的终结,只不过从一个菜鸟的角度,我们更期待快速实现一个基本GIS系统是我们的期盼,那跃进一下,我们看看有了图形表示,有了索引之后,我们如何进行显示它们,又是如何存取它们。下一篇我们的探索领域将从NTS到Sharpmap。
其实所谓的区域树思路非常简单,它的原理就是对各个Envelope进行排序,然后以它们为叶节点逐层向上建树,这样建立的树是严格平衡的,它的分支节点的Envelope为子节点Envelope的并。好了,那怎么排呢,每个索引对象的Envelope有一个四维参数,即x,y,width,height。如果排序,只能使用其中一个指标,或者几个指标的组合进行评价。NTS实现了这种数据结构。NTS对它的描述是一种只可以查询的R树,但对照了R树和区域树的定义的差别,NTS里面实现的这种结构与区域树更为接近,至于是否属实还有待进一步学习。对其的操作分别可以对X,Y进行排序,对X和Y的分别查询的时间复杂度为O(logn+k),然后对其查找出的节点进行匹配,最终得到的时间复杂度为log^2+k。,同时它的空间复杂度上升到了O(nlogn)。
NTS对这种区域树的实现基本也就到此为止了。但翻阅计算几何书时,发现时间复杂度还是可以再降的,将到我们觉着不可思议,可以达到O(logn+k)。这种技术叫分散层叠。这种技术的核心思想就是在对X排序生成的区域树之后,不建立第二棵Y区域树。而是建立另一种树结构,它是针对X结构的树的存储,构造结构相同的一棵树,每棵树的节点存的是该节点子节点的Y排序,层与层之间的元素,通过指针指向不小于其的最小元素。如下图所示。有时间Happy
kaikai计划在NTS的基础上实现分成散叠技术,也算是做一个实践吧。
连讲了两篇空间索引,这绝对不是索引的终结,只不过从一个菜鸟的角度,我们更期待快速实现一个基本GIS系统是我们的期盼,那跃进一下,我们看看有了图形表示,有了索引之后,我们如何进行显示它们,又是如何存取它们。下一篇我们的探索领域将从NTS到Sharpmap。
相关文章推荐
- GIS是怎样建成的系列之二:图形,图形,我们去哪里呀(四叉树部分)
- GIS是怎样建成的系列之一:从图形开始
- 怎样将GIS图形复制到Windows剪贴板,粘贴到Word中
- 图形图像基本处理之——二值化、截取部分区域、提取质心
- 怎样将GIS图形复制到Windows剪贴板,粘贴到Word中
- (转贴)我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢?
- [导入](转贴)我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢?
- 我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢?
- GIS是怎样建成的之五:瓦片(Tile)
- GIS是怎样建成的之四:gdal\ogr以及provider
- 我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢?
- 点击图片中不规则图形提示选中不同区域
- 在NSTableView排序时,我们可以通过增加一个小小的三角箭头图形,让表格的排序看得更加清楚。
- iOS 怎样从图片中截取出需要的部分 缩放与选取
- 怎样理解产品需求的4个部分
- 截取一张图片中的部分区域存成新文件
- 如何判断用paint画出的图形的坐标是在哪里?
- Clay:易塑的c#动态对象——第一部分:为什么我们需要它
- 采用OPENCV,从一幅图像中提取部分区域,并保存为新图像。
- 怎样用C语言打造炫酷的图形编程