arcmap创建空间索引_GIS中创建空间索引的一种方法
在這里注冊以來,只字未曾發表,有點不好意思了。剛好最近解決了一個空間索引方面的難題,寫幾個字以充門面:)
最近在做嵌入式GIS系統,由于PDA的CUP和內存跟不上,做東西的時候自己要斤斤計較不能再像PC機上那么大手大腳的浪費內存。開始的時候,加載矢量數據(暫時只針對shp文件)是先把全部幾何對象讀入內存,放在一個動態數組CArray上的,這樣就造成打開一個shp文件的時間比較長,而且文件大的時候就根本加載不進去了比如一個100多M的shp文件。
原來的方式不能加載大文件,可現實是殘酷的,在老板的一再催逼之下只能換種方式——使用空間索引。在系統啟動的時候并不把幾何對象的數據加載進內存,而是顯示的時候臨時從文件中讀取當前視圖范圍內的對象。
現有的能查到的空間索引創建方法,大多都是“樹”結構的,比如二叉樹、四叉樹等。采用樹結構建立空間索引,必須要保存每個幾何對象的矩形位置,也就是上下左右四個坐標(或者也有其他辦法但我不知道的……),這樣一來就有個問題——索引文件還是比較大的,點圖層就非常明顯,生成的索引文件比shp文件更大,而且當索引文件很大的時候,同樣會遇到加載不了的問題。我就試過用四叉樹建立索引,一個廣東省的居民地生成的索引有好幾十M,同樣在PDA上加不了。。。。。
浪費了一周時間搞的四叉樹沒用,心灰意懶突然又柳暗花明,且聽我細細道來:
現在很多webgis都是事先把地圖配好,然后再切成一幅幅的圖片,顯示的時候再根據當前視圖范圍和顯示層數計算出有哪幾張圖片需要顯示再從服務器加載。這就是傳說中的“瓦片”了。開源的三維系統WorldWind(上帝之眼)的影像也是采用這種方式加載的。這方式的特點就是根據圖層范圍和級別可以計算出需要多少個格網,以及每個格的行、列號,根據某個視圖范圍也可以計算出當前范圍內有多少個格,每個格的行、列號。
到這里就清晰了,建立索引需要解決的是什么問題?無非就是如何最快的找到當前視圖范圍內有哪些幾何對象!而worldwind的影像加載方法很適合,因為他可以直接計算出當前視圖范圍有多少格網、以及每個格網的行、列號,而不是像樹結構那樣需要從根節點遞歸搜索。只要我們知道這個圖層在每個格網中有多少幾何對象,每個幾何對象的記錄號——shp文件中只要知道了記錄號就可以非常方便的定位讀取,就可以實現我們創建空間索引的目的了。
創建方法是這樣的:使用WorldWind切割影像的方法對整個圖層范圍進行分割,得到n個格網,然后查詢每個格網范圍內的幾何對象(查詢的操作我是通過ArcEngine做的),然后按格式保存到索引文件內即可。下面發索引文件的結構圖給大家看看吧,不多說了。
這種方式創建的空間索引有幾個好處:索引文件很小,由于不保存幾何對象的范圍,只是保存了記錄號,一個幾十M的shp文件,索引才幾K;檢索比較快,知道行列號后,只需要一次讀取兩個int類型的結構就可以知道這個格內有多少幾何對象,讀N個int類型的內容就可得到這個格內所有的幾何對象記錄號了(格子內有多少幾何對象就讀多少次)。
空間索引再配合圖層的可見比例尺,以及空間索引的級別,可以很好的實現在PDA上面加載大shp文件了!現在存儲卡已經有好幾G了,雖然跟PC機差太遠,但加載幾百M的數據再不是做夢了嘿嘿
此外,在PDA上面也可以用worldwind的方法加載影像圖,也就是先切圖片,再一塊塊加載顯示。速度還不錯,就是需要空間大
《遠景地理信息系統|RemoteGIS》
RemoteGIS是基于HTML5開發的高性能WEBGIS,支持百萬級別矢量數據。
總結
以上是生活随笔為你收集整理的arcmap创建空间索引_GIS中创建空间索引的一种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python open函数参数newli
- 下一篇: deebot扫地机器人怎么清洁_扫地机器