1. 程式人生 > >ArcGIS 地圖切圖系列之(一)切片原理解析

ArcGIS 地圖切圖系列之(一)切片原理解析

一、什麼是地圖快取

       地圖快取是一個包含了不同比例尺下整個地圖範圍的地圖切片的目錄。即一個快取的地圖服務就是能夠利用靜態圖片來快速的提供地圖的服務。ArcGIS Server 快取服務由ArcGIS Server 預先生成的一套地圖圖片/圖層,以快速顯示,滿足使用者對地圖的請求。         通常用作地圖快取的資料包括幾個特點,比如瀏覽量大、資料變化小、僅在小比例尺下顯示等,這樣的地圖適合作為底圖。優點就是速度之快,預先配色,顯示效果佳,滿足高併發訪問;缺點會佔用額外磁碟空間,需要預先生成切片,無法自定義地圖。

二、ArcGIS Server提供的切片方式

       有兩種:緊湊模式(compact)和鬆散模式(exploded)
               緊湊型:
- 將切片儲存在緊湊,連續的檔案流中(“bundles”)
- 每個bundle 中最多有16,384 個切片
- 可以快速複製遷移
- 佔用磁碟空間更小
鬆散型:
- 切片以單獨的圖片檔案的形式存放在磁碟上
- 能夠被其他工具直接讀取
- 佔用磁碟空間較大,難於管理
- 不易於複製和遷移

三、地圖切圖原理

        如圖所示:在進行切圖之前首先要確定切圖的起點(即Tiling scheme origin Point)、圖片寬度(width)和圖片高度(height)。設定起點(WGS84下預設是(-400,400))的目的在於保證同一座標系下的切片地圖能夠完美的疊加到一起。這樣從起點計算,你會發現,有很多地方是空的,沒有地圖資料,那麼這個在切片過程中不會佔有任何資源,只會對地圖資料進行網格劃分。
       在預設的Tiling scheme origin 和 圖片大小的情況下,進行地圖切片,就可以根據使用者設定的比例尺來計算地圖資料所在整個網格中的行列號了。計算公式如下:
            col1 = (int)Math.floor((point.x1 - this.x1) / 256 / plottingResolution );      row1 = (int)Math.floor((Math.abs(point.y1 - this.y1)) / 256 /plottingResolution );  

       其中,point是當前點座標,this指的是origin點(-400,400),plottingResolution是指當前level下的地圖解析度。這裡計算要注意兩點,一是計算結果只求整數部分;二是要取絕對值。

       那麼怎麼計算plottingResolution呢,根據使用者輸入的levelScale就可以得出當前下的地圖解析度:

       Scale = 1 : (96 * 2 * Math.PI * 6378137 * resolution / 360 / 0.0254)

下面我們來闡述一下scale和resolution之間的一個關係:

Scale:地圖比例尺,比例尺是表示圖上距離比實地距離縮小的程度,也叫縮尺。公式為:比例尺=圖上距離/實地距離。用數字的比 例式或分數式表示比例尺的大小。例如地圖上1釐米代表實地距離500千米,可寫成:1∶50,000,000或寫成:1/50,000,000。

Resolution:代表解析度。表示當前地圖範圍內,1畫素代表多少地圖單位(X地圖單位/畫素),地圖單位取決於資料本身的空間參考。代表解析度。Resolution 的實際含義代表當前地圖範圍內,1畫素代表多少地圖單位(X地圖單位/畫素),地圖單位取決於資料本身的空間參考。Resolution跟dpi(dpi代表每英寸的畫素數)有關,跟地圖的單位有關。

Resolution和Scale的轉換演算法 : 

   (一)地圖的座標單位是米,dpi=96    1英寸= 2.54釐米;  1英寸=96畫素;  最終換算的單位是米;

     scale=125000000,代表圖上1米實地125000000米; 

     米和畫素間的換算公式:

           1英寸=0.0254米=96畫素 

           1畫素=0.0254/96 米 

           Scale = 1 : (96 * Resolution / 0.0254)

           則根據1:125000000比例尺,圖上1畫素代表實地距離是125000000*0.0254/96 = 33072.9166666667米。我們這個換算結果和切片的結果略微有0.07米的誤差。這個誤差產生的原因是英寸換算釐米的引數決定 的,server使用的換算引數1英寸約等於0.0254000508米。             

     (二)如果地理座標系是wgs84,地圖的單位是度,dpi為96  

       度和米之間的換算引數:

           1度約等於 111194.872221777米   

      接下來就需要進行度和畫素間的換算: 

         當比例尺為1:64000000米時,相當於1畫素 = 64000000*0.0254000508/96 = 16933.3672米 ,再將米轉換為度 16933.3672/111194.872221777 =0.1522855043731385度 因此當地圖單位為度時,近似計算在1:64000000 對應的Resolution為0.1522855043731385度。

     Scale = 1 : (96 * 2 * Math.PI * 6378137 * resolution / 360 / 0.0254);

四、切片結果

        如圖所示:生成的鬆散型切片結果,我們可以看到level、行,下面對應的在這一行存在的切片圖片。
       根據配置檔案,如下圖所示,包含了以上所有的資訊: