此文**:介紹四叉樹的,給自己做乙個備忘,同時也給有需要的人乙個共享。非常感謝提供此文的網友。
陳玉進 李泉 南京跬步科技****(
四叉樹索引(quadtree),類似於前面介紹的網格索引,也是對地理空間進行網格劃分,對地理空間遞迴進行四分來構建四叉樹,本文將在普通四叉樹的基礎上,介紹一種改進的四叉樹索引結構。
首先,先介紹乙個
gis(
geographic information system
)或者計算機圖形學上非常重要的概念——最小外包矩形
最小外包矩形
mbr就是包圍圖元,且平行於x,y軸的最小外接矩形。mbr到底有什麼用處呢,為什麼要引入這個概念呢?因為,圖元的形狀是不規則的,而mbr是平行於x,y軸的規則圖形,設想一下,如果所有的圖元都是平行於x,y軸的矩形,那針對這樣的矩形進行幾何上的任何判斷,是不是要簡單很多呢?不管我們人自己寫公式演算法或者編寫程式執行,是不是都要比原本複雜的圖形幾何運算要簡潔很多呢?答案很顯然。
然後,我們再介紹一下
gis空間操作的步驟(這個步驟,在前面忘記向大家說明了,在這裡補充一下)
可見,過濾階段,通過空間索引可以排除掉一些明顯不符合條件的圖元,得到後選集合,然後對後選圖元集合進行精確幾何運算,得到最終結果。大家可能會有這樣的疑問,這樣有必要嗎?是不是反而把問題複雜化了?合適的空間索引只會提高計算機的效率,沒有空間索引,我們無疑要對集合中的每個圖元進行精確幾何運算,而這樣的運算是複雜的,是非常占用cpu的,所以需要空間索引,採取少量的記憶體和簡單的cup運算,來儘量減少那種高耗cup的精確運算的次數,這樣做是完全值得的。至於精確的幾何運算到底複雜在**,該如何進行精確的幾何運算,將在下面的章節中詳細描述,這裡主要介紹過濾階段的空間索引。
現在,讓我們來具體了解一下「四叉樹索引」。
四叉樹索引就是遞迴地對地理空間進行四分,直到自行設定的終止條件(比如每個節點關聯圖元的個數不超過3個,超過3個,就再四分),最終形成一顆有層次的四叉樹。圖中有數字標識的矩形是每個圖元的mbr,每個葉子節點儲存了本區域所關聯的圖元標識列表和本區域地理範圍,非葉子節點僅儲存了區域的地理範圍。大家可以發現,同樣存在乙個圖元標識被多個區域所關聯,相應地儲存在多個葉子節點上,比如「6「所代表的圖元,分別儲存在四個分枝上。這樣,就存在索引的冗餘,與網格索引存在同樣的弊端。下面我們介紹一種改進的四叉樹索引,或者說是分層的網格索引。
改進的四叉樹索引,就是為了避免這種空間索引的冗餘,基本改進思路是:讓每個圖元的
mbr被乙個最小區域完全包含。
可以看出,3和13分別都跨越了兩個區域,要被乙個最小區域完全包含,就只能是根節點所代表的區域,2,5跨越了兩個區域,6跨越了四個區域,要被乙個最小區域完全包含,就只能是nw區域。怎麼判斷乙個圖元被哪個最小區域完全包含呢?從直觀上看,遞迴地對地理空間進行四分,如果圖元與乙個區域四分的劃分線相交,則這個圖元就歸屬於這個區域,或者直到不再劃分了,那就屬於這個不再劃分的區域。呵呵。。。可能有點繞口,看圖,結合「最小」「完全包含」
這兩個字眼,您就明白了。這顆四叉樹中,圖元的標識不再僅僅儲存在葉子節點上,而是每個節點都有可能儲存,這樣也就避免了索引冗餘。同時每個節點儲存本節點所在的地理範圍。
有了四叉樹索引,下面又該如何利用這顆樹來幫助檢索查詢呢?還是矩形選擇為例吧!(為什麼我總是拿這個例子來說事呢?因為這個例子簡單,容易理解,有代表性!)我們在地圖上畫乙個矩形,判斷地圖上哪些圖元落在這個矩形裡或者和這個所畫矩形相交。方法很多,這裡介紹一種簡單的檢索步驟,如下:1,首先,從四叉樹的根節點開始,把根節點所關聯的圖元標識都加到乙個list裡;2,比較此矩形範圍與根節點的四個子節點(或者叫子區域)是否有交集(相交或者包含),如果有,則把相應的區域所關聯的圖元標識加到list集合中,如果沒有,則以下這顆子樹都不再考慮。3,以上過程的遞迴,直到樹的葉子節點終止,返回list。4,從list集合中根據標識一一取出圖元,先判斷圖元mbr與矩形有無交集,如果有,則進行下面的精確幾何判斷,如果沒有,則不再考慮此圖元。(當然,這裡只說了乙個基本思路,其實還有其他一些不同的方法,比如,結合空間資料磁碟的物理儲存會有一些調整)
總結:改進的四叉樹索引解決了線,面物件的索引冗餘,具有較好的效能,而被大型空間資料庫引擎所採用,如arcsde,oracle spatial等,同時這種結構也適用於空間資料的磁碟索引,配合空間排序聚類,基於分形的hilbert演算法資料組織,將在空間資料格式的定義中發揮重要作用。
一種基於改進四叉樹的gis空間選擇查詢演算法董鵬楊崇俊芮小平高積糧計算機工程與應用
四叉樹與八叉樹
前序 四叉樹或四元樹也被稱為q樹 q tree 四叉樹廣泛應用於影象處理 空間資料索引 2d中的快速碰撞檢測 儲存稀疏資料等,而八叉樹 octree 主要應用於3d圖形處理。對遊戲程式設計,這會很有用。本文著重於對四叉樹與八叉樹的原理與結構的介紹,幫助您在腦海中建立四叉樹與八叉樹的基本思想。本文並不...
四叉樹與八叉樹
前序 四叉樹或四元樹也被稱為q樹 q tree 四叉樹廣泛應用於影象處理 空間資料索引 2d中的快速碰撞檢測 儲存稀疏資料等,而八叉樹 octree 主要應用於3d圖形處理。對遊戲程式設計,這會很有用。本文著重於對四叉樹與八叉樹的原理與結構的介紹,幫助您在腦海中建立四叉樹與八叉樹的基本思想。本文並不...
四叉樹與八叉樹
前序 四叉樹或四元樹也被稱為q樹 q tree 四叉樹廣泛應用於影象處理 空間資料索引 2d中的快速碰撞檢測 儲存稀疏資料等,而八叉樹 octree 主要應用於3d圖形處理。對遊戲程式設計,這會很有用。本文著重於對四叉樹與八叉樹的原理與結構的介紹,幫助您在腦海中建立四叉樹與八叉樹的基本思想。本文並不...