天天看點

7 段話說明 地圖切片的概念與原理

7 段話說明 地圖切片的概念與原理

有人說:一個人從1歲活到80歲很平凡,但如果從80歲倒着活,那麼一半以上的人都可能不凡。

生活沒有捷徑,我們踩過的坑都成為了生活的經驗,這些經驗越早知道,你要走的彎路就會越少。 

定義

地圖切片:采用預生成的方法存放在伺服器端,然後根據使用者送出的不同請求,把相應的地圖瓦片發送給用戶端的過程,它是一種多分辨率層次模型,從瓦片金字塔底層到頂層,分辨率越來越低,但表示的地理範圍不變。

地圖緩存:又稱地圖瓦片,是一個包含了不同比例尺下整個地圖範圍的地圖切片的目錄,即一個緩存的地圖服務就是能夠利用靜态圖檔來快速地提供地圖的服務。

優缺點

1)速度快,預先配色,顯示效果佳,滿足高并發通路,适合做底圖。

2)瓦片地圖緩存非常高效,如果你曾經檢視過某一區域的瓦片,當你再次檢視該區域的瓦片時,浏覽器可能使用之前緩存的相同的瓦片,而不用重新下載下傳一次。

3)瓦片地圖可以漸進加載。中心區域的瓦片可能優先于邊緣區域的瓦片加載,你可以移動或定位某一點,即使目前地圖邊緣區域還未加載。

4)簡單易用。是以很容易在伺服器、網絡、桌面或移動裝置上實作技術內建。

5)需要額外占用磁盤空間,需要預先生成切片,無法自定義地圖。

原理

在進行切片之前首先要确定切圖的起點(Tiling scheme origin point)、圖檔寬度和高度,設定起點(WGS84下預設是(-400,400))的目的在于保證同一坐标系下的切片地圖可以完美的疊加在一起。

在預設的Tiling scheme origin下和圖檔大小的情況下進行地圖切片,可以根據使用者設定的比例尺來計算地圖資料在整個網格中的行列号,計算公式如下:

col=(int)Math.floor((point.x1-this.x1)/256/plottingResolution);
row=(int)Math.floor((Math.abs(point.y1-this.y1))/256/plottingResolution);      

其中point是目前坐标,this是origin點坐标,plottingResolution指目前Level的地圖的地圖分辨率。

如果要計算plottingResolution,可以根據使用者輸入的levelScale得到目前條件下的地圖分辨率:

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

主要概念

1) 四至(Extent)和原點(Origin)

2)切片的分辨率和比例尺

比例尺:圖上一機關長度代表實際多少長度機關;分辨率:螢幕一像素(px)代表實際多少機關,實際機關按照地圖坐标而定。分辨率與dpi(每英寸的像素數)有關、與地圖機關有關。

兩者之間的轉換關系:

1、如果地圖機關是米,dpi=96 1英寸=2.54厘米;1英寸=96像素;最終換算的機關是米;

Scale=1:(96*Resolution/0.0254);      

2、如果地圖機關是度(地理坐标系是WGS84),dpi為96,1度約等于111194.872221777米;

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

切片分類

1)矢量切片(詳情)

是一種利用協定緩沖(Protocal Buffers)技術的緊湊的二進制格式用來傳遞資訊。當渲染地圖時矢量切片使用一系列存儲的内部資料進行制圖。被組織到矢量切片的圖層比如(水、道路、區域等),每一層都有包含幾何圖形和可變屬性的獨立要素。通俗地講,就是将矢量資料以建立金字塔的方式,像栅格切片那樣分割成一個個描述性檔案,以GeoJson格式或者PDF等自定義格式組織,然後在前端根據顯示需要按需請求不同的矢量瓦片資料進行Web繪圖

常見的格式有GeoJson、TopoJson、PDF(ArcGIS格式)、KML、GeoRSS等等。

2)栅格切片

注意事項

注意切片等級的設定,如果生成的級别太高,等待時間非常漫長。以ArcGIS Server切片服務為例,每一級相對上一級是 4 倍的關系,每一級是将上一級一個切片再分成大小一緻的四個切片,也就是說每一級生成的切片數将是 4 的 n 次幂。

不同平台的切片方式