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