面空間數據中網格索引和四叉樹索引的結合及優化的一種方案


文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

1.背景

針對判斷一個點落在面圖層中哪個要素上的需求,在我之前的博客:WebGIS中一種根據網格索引判斷點面關系的方法http://www.cnblogs.com/naaoveGIS/p/5148185.html)中有詳細的描述。其原理大致為:

            

其處理步驟為:

                    

2.當前網格索引的幾個缺點

a.網格索引方案分為了一個索引文件和一個數據文件,任何請求進入時均會先讀取索引文件,再讀取數據文件,那么很容易出現資源爭搶情況,不利於並發支持。

b.網格的大小會嚴重影響到查詢效率,但是如果網格建立的足夠小,那么索引文件不斷增大,同樣會導致磁盤尋址花費的時間增多。

c.數據的讀取一定要經過兩次IO,一次讀索引,一次讀數據,會影響讀取效率。

3.方案的優化,基於網格索引的索引四叉樹划分

四叉樹、R樹等均是空間索引常用的算法,這里我選擇使用四叉索引來進行進一步優化。四叉樹索引原理非常簡單,即將一個范圍根據深度,不斷平分,如圖所示:

                    

這里優化思路是:將要素首先進行四叉樹平分,然后對每個葉子節點包含的范圍再進行網格索引生成:

           

4.優化方案的詳細描述

4.1索引的生成步驟

a.首先生成數據文件。

b.通過設置的四叉樹深度,算出葉子節點的個數。然后通過獲取到的要素四角坐標,算出葉子節點的四角范圍:leafminx、leafminy、leafmaxx、leafmaxy。

c.根據要素個數和網格因子,算出整個范圍內網格的個數,用整個范圍的四角坐標與網格因子計算,得出一個網格的BlockXsize和BlokcYsize。

d.針對每個葉子節點,建立該節點的網格索引,索引中包含了網格與要素的對應關系。

生成文件截圖:

                       

4.2數據讀取

a.讀取配置獲取到要素的四角范圍mapminx、mapminy、mapmaxx、mapmaxy、leafgeoxsize、leafgeoysize。

b.通過mapminx、mapminy、leafgeoxsize、leafgeoysize參數算出該XY坐標所在的網格索引編號。

c.讀取該網格索引,獲取到該索引的leafminx、leafminy、leafmaxx、leafmaxy、blockxsize、blockysize。

d.通過leafmaxx、leafmaxy以及blockxsize、blockysize算出XY所在網格索引的字節位置pos,將磁盤指針移動至該pos處。

e.獲取到索引中包含的要素信息,比如要素所在的數據文件中的datapos。

f.讀取數據文件,在該文件的datapos處將詳細信息讀取返回。

5.方案優點總結

a.將一個大索引文件分成多個索引文件,在大量隨機點並發訪問時,可以將壓力負載至各文件上,減少同一文件讀取時的資源爭搶IO瓶頸。

b.每一個索引文件大小大大減小,讀取會更快,磁盤尋址也會更快。

c.為增加網格命中單個(非多個)要素的概率,可以將每個網格的大小進一步縮小,其導致的網格索引增大會平攤至每個網格索引上,從而使副作用變小。

6.進一步優化

a.在讀取索引基本信息后可以將該信息緩存至內存中,減少Config文件的IO次數。

b.生成索引時,如果一個網格只包含了一個要素的信息,可以將該信息也整合至網格索引中。這樣,查詢時,如果查詢到的網格只包含單個要素,則可以直接在索引中將要素信息獲取,而不需要再對數據索引做讀取操作,減少對數據索引的IO次數。

                                                                         -----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

                                                                             如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                                                                                           


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM