ArcGIS Server开发教程系列(3)切片
切片工作,我們可以一級一級的切,也可以,所有的一塊切,Recreate All Tiles這項是說,在沒有進行任何的切片工作時,可以選用這項;Recreate Empty Tiles這項是說,如果之前已經對某一級進行了切片,再重新切片時,可以選這項,具體可以查看幫助;Delete Tiles這項可以刪除之前切的切片;比方說我們計算機正在切圖,突然間斷電了,切了幾天,幾十G的地圖切片,怎么辦?我們不能重新開始切啊,我們就可以選擇Recreate Empty Tiles,把剩余的地圖切片補上即可。
?
切片參數設置可以在發布服務時進行,或者catalog里點擊已發布的服務修改服務屬性
?
?
這里設置文本的反鋸齒,最好設置為normal或以上,否則容易出現文本不清晰
設置緩存目錄:這個很重要,因為我們有時切圖可數據量可能幾十G,上百G,甚至上T,這樣的話我們不能把切片默認到目錄:C:\arcgisserver\directories\arcgiscache目錄,我們需要添加一個磁盤空間比較大的盤
?
?
設置切片的CPU核數,本機4個CPU,4個線程;所以我們設置最大用幾個CPU切片的時候,那就是3了,如果你設置成5,那么最后發布是不成功的。
Cpu線程數決定了你將要最多要實例化多少個進程去切圖,一般最大設置為CPU線程數-1,這樣保證CPU使用率在50%左右,如果設置太大,會造成CPU使用率在100%,硬件使用率一直在100%?可能會導致負荷過重,從而導致系統出現問題。
?
根據需求分別設置下面的參數,切片切幾個級別
?
選擇suggest,彈出輸入框輸入設置幾個級別,這里設置為5
?
下面按圖設置即可
?
可以添加或刪除自定義下的比例尺(這個地方已經進行過切片所以是灰色的),可以設置切片的格式為PNG32,存儲格式
?
?
高級設置這里根據需要選擇
?
?
以下一段資料參考http://blog.csdn.net/warrenwyf/article/details/6069711
在ArcGIS 10中出現了一種新的切片緩存文件格式:緊湊型存儲(Compact)。與之前的松散型存儲(Exploded)相比,它有遷移方便、創建更快、減少存儲空間等諸多優點,已經成為了創建切片緩存的默認格式。對于本身ArcGIS的產品而言,訪問緊湊型存儲與訪問松散型存儲沒有任何區別,但是,如果第三方應用想訪問新的切片格式,目前官方給出了“不可以”的答復:
The internal architecture of the bundle is not publicly documented by ESRI. If you've coded your own logic to pull tiles out of a virtual directory, you should continue to use the "exploded" format which stores each tile as a single file and was the only option at ArcGIS Server versions 9.3.1 and previous.
我Google了一下,也沒有任何相關的資料,因此索性自力更生,自己分析一下緊湊型存儲的格式,相信這是目前可以找到的關于緊湊型存儲內部格式的唯一資料。
l??緊湊型存儲的原理
緊湊型存儲最主要的兩種文件是bundle和bundlx文件,其中bundle文件用以存儲切片數據,bundlx是bundle文件中切片數據的索引文件。
一個bundle文件中最多可以存儲128×128(16384)個切片,但是創建切片緩存并不是一張張切片單獨生成,而是以4096像素(無抗鋸齒)或2048像素(有抗鋸齒)為邊長渲染的,如果我們選擇的切片邊長為256像素并開啟了抗鋸齒,那么每次ArcSOC進程創建的是一張以8×8(64)個切片拼接成的大圖,然后切割后存入bundle文件中。
下圖中,藍色邊框代表的是bundle文件,黑色格子是生成切片時拼接的大圖,具體的每個切片在黑色格子中,圖中并沒有顯示出來。
?
?
l??存儲格式的分析
在分析緊湊型存儲格式之前,我首先問自己,如果你要在一個bundle文件中存儲內容,同時通過一個bundlx文件中存放索引應該怎么做?中規中矩的做法就是參考數據庫的位圖索引方式,在bundlx文件中用固定的幾個字節標識一個切片在bundle文件中的狀態(存儲的偏移量和長度)。
觀察ArcGIS生成的bundlx文件,每個文件都是一樣的大小:81952字節。上面已經提到,每個bundle文件中最多存儲16384個切片,雖然bundle文件中可能并沒有這么多切片,但是,我猜測bundlx文件中必然是保留了所有者16384個切片的索引位置。粗略估計每個切片會占據大約5個字節,16384×5=81920字節,還多出32字節,猜測存儲bundlx文件的標識信息。
通過對一個很存儲切片很稀疏的bundlx文件的規律進行觀察和猜測,確定了bundlx中文件起始16字節和文件結束16字節與索引無關,剩余的81920字節數據以5個字節的頻率重復,構成了一個對bundle文件的索引。
本來以為這5個字節會保存bundle文件中切片數據的偏移和長度,但是發現5個字節表達的信息量可能不夠,因此,我同時對bundle中的切片數據進行了一個分析。
我猜想文件并沒有進行壓縮處理,因此在文件中搜索PNG文件的文件頭0x89504E47(我在創建緩存時選擇了PNG24格式),發現果然如此。同時,每2個切片數據之間相隔了4個字節(切片數據我是用Exploded的圖片直接進行比較的),通過猜想、嘗試,發現這4個字節正好是以低位到高位的方式標示了后續這個切片數據的長度。
既然切片數據長度是在bundle文件中記錄的,那么在bundlx文件中索引的必然只包括切片數據的偏移量,經過實驗發現,bundlx中的5個字節也是以低位到高位的方式標示了數據的偏移量。
切片數據長度和數據偏移猜想應該是無符號的整數,后面的實踐證明了這一點。
還有一個問題,bundlx中的每5個字節標示的到底是哪個切片的數據偏移?我的實驗的結果是:按列排序:
| 1 | 129 | … | … |
| 2 | 130 | ? | ? |
| 3 | 131 | ? | ? |
| … | … | ? | ? |
| … | … | ? | ? |
| 128 | 256 | ? | 16384 |
從上面的分析,我們如果知道了一個切片的級別、行號、列號,就可以通過bundlx首先找到bundle中切片內容的偏移,然后從bundle文件中取出4個字節的長度數據,再隨后根據這個長度讀取真實的切片數據。關于如何計算切片的行號、列號,以及bundle文件的命名方式,相對比較簡單,這里就不詳細敘述了。
?
然后在catalog里就開始自動切片了,可以查看切片進度
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的ArcGIS Server开发教程系列(3)切片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android横竖屏切换继续播放视频
- 下一篇: SVN版本回退