GIS是怎樣建成的之三:圖形,圖形,我們去哪裏呀(區域樹部分)

       前面的一篇我們討論了第一種空間索引——四叉樹。作爲二叉排序樹在二維空間的推廣,四叉樹是一種非常直觀有效的結構。但同樣,它也帶來了二叉排序樹的毛病,那就是當索引對象極端時,它的查找的時間複雜度會退化成線性也就是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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章