您的位置:首页 > 其它

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的基础上实现分成散叠技术,也算是做一个实践吧。


连讲了两篇空间索引,这绝对不是索引的终结,只不过从一个菜鸟的角度,我们更期待快速实现一个基本GIS系统是我们的期盼,那跃进一下,我们看看有了图形表示,有了索引之后,我们如何进行显示它们,又是如何存取它们。下一篇我们的探索领域将从NTS到Sharpmap。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐