(二)探究本質,WebGIS前端地圖顯示之地圖比例尺換算原理

https://www.cnblogs.com/naaoveGIS/p/3898607.htmlhtml

 

 

文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/算法

1.沒有豆漿機怎麼辦?

喝豆漿是咱們早晨中基本必備的一環,油條豆漿,其樂融融。若是我問你們豆漿是怎麼來的,五穀不分的人會說是用錢買的,瞭解有黃豆這會事的人會說是用豆漿機把黃豆磨出來的。若是咱們再倒退十幾年,我相信見到過挑着擔子賣豆漿的人就會給出一個更詳細的答案了,先用水侵泡黃豆一晚上,而後在器皿中充分搗碎,再用中火一直煮,而且要不斷攪拌,直至浮沫消失,豆漿才作成了。數據庫

聽到這個答案,不少人就會驚訝了,這麼麻煩啊,仍是有豆漿機方便。如今我提出一個問題,若是停電了,若是豆漿機壞了,若是你沒有錢去買豆漿機,你還能本身作出豆漿嗎?難道你就只能去買別人的豆漿喝?瀏覽器

2.若是沒有二次開發包,怎麼辦?

若是我把已經有的地圖數據比做黃豆,我問你們一個問題,若是咱們的項目因爲經費問題,不提供正版的Runtime,也不提供AGS的地形圖服務,那咱們該如何讓瀏覽器來顯示地形圖呢?固然,有的人會指出一整套開源的方案,好比我用Geoserver啊等等。設計

那若是我再問你,假若有一天咱們碰到了一個奇怪的業主,它跟你說,咱們只想地圖在第級別顯示,咱們只想地圖顯示某一區域,咱們的要素太多太多了,咱們但願能在地圖拖動的時候動態的將可視範圍內的要素加載上來,等等等等問題。若是你是一個只知道用豆漿機的人,你該如何完成這些刁鑽的問題?3d

二次開發作到必定程度的人,也不會只侷限在,C/S時加載MXD出個地圖,B/S時寫入一個地形圖服務URL出個圖的。他一樣也必須瞭解,究竟是如何將服務端一個一個瓦片變成瀏覽器裏看到的一張完整的地圖的。server

這裏我將連續花上幾個篇幅來一一回答這個問題。xml

3.地圖比例尺中的Scale和Resolution

前面我不厭其煩的給你們說了不少本節的題外話,如今言歸正傳,咱們開始這個系列中的第一個問題,地圖比例尺換算原理。想要從底層實現瓦片的顯示,咱們首先必須瞭解瓦片自己。htm

咱們用arcgis切完圖後,打開發布的服務或者打開config.xml配置文件,能夠看到所切之圖的相關配置。如圖所示:blog

 

 

其中levels即爲所切圖的比例尺參數。每一層Level包含了一個resolution參數和一個scale參數。

Scale表示的是比例尺,即地圖上的一釐米表明着實際上的多少釐米。例如地圖上1釐米表明實地距離500公里,可寫成:1 ∶ 50,000,000或寫成:1/50,000,000。

Resolution表示的是分辨率。Resolution 的實際含義表明當前地圖範圍內,1像素表明多少地圖單位(X地圖單位/像素),地圖單位取決於數據自己的空間參考。可見Resolution跟 dpi有關係(dpi表明每英寸的像素數),跟地圖的單位也有關係。

4.行列號——瓦片存放地址的標識

在這裏給你們再介紹一個GIS裏的術語——行列號。我麼能夠這麼想象,把一張矩形的地圖,按照必定的規律(按照切圖原點,切圖範圍,瓦片大小),分紅了不少個大小相同的矩形,那麼這個矩形所在位置,我麼基本上是能夠用Row和Col來表示出來。固然,若是咱們瞭解影像金字塔這個概念,那麼前面還要加上一個Level(影像級別),說通俗點就是你目前切割的這個矩形是屬於整個影像中的哪一層的。

這裏,咱們先看看切完地圖後,瓦片的存放路徑,我以離散型瓦片(Exploded)爲例:

 

這裏的L06表示的是瓦片所在地圖的級別,R00001179d表示的瓦片的行號,C0000a24e爲瓦片的列號。這些數字是怎麼算出來的,容我留着在後面的幾章給你們一一來說解。

不過這裏我能夠負責任的告訴你們,若是想知道行列號怎麼換算,那麼下面這個問題你必須知道答案。

屏幕上1像素表明實際距離是多少?

5.屏幕上1像素表明的實際距離是多少?

在計算瓦片的行列號以前,咱們須要獲得圖上一像素表明實際距離多少米。如今假設地圖的座標單位是米,dpi爲96 ;
    1英寸=2.54釐米; 
    1英寸=96像素; 
    最終換算的單位是米; 
    若是當前地圖比例尺爲1:125000000,則表明圖上1米等於實地125000000米; 
    米和像素間的換算公式: 
    1英寸=0.0254米=96像素 
    1像素=0.0254/96 米 
    則根據1:125000000比例尺,圖上1像素表明實地距離是 125000000*0.0254/96 = 33072.9166666667米。

6.平面座標系和經緯度座標系中的比例尺

6.1平面座標系中的比例尺

當數據庫爲平面座標系統時,此時系統中所需的比例尺應該從scale中取得。由於原scale中表示的實際單位是釐米,而咱們系統中須要的單位是米,因此在填寫地圖比例尺時,會將scale除以一百後再填寫。更具第二節中描寫,咱們能夠在系統中換算出1像素表明了多少米。

6.2經緯度座標系中的比例尺

當數據庫爲經緯度座標系統時,此時系統中所需的比例尺應該從resolution中取得。此時的resolution直接表明了地圖上一像素等於實際中的多少度。

可是,由於代碼中已經有了一個如第二節中所描述的一個轉換算法,因此此時在填寫數據庫中比例尺時,須要將此算法逆向換算後再填入。

即:resolution*96/inch2centimeter

7.英寸轉釐米所引起的問題

英寸轉釐米的國際參數是:2.5399998,當利用天地圖或者其餘第三方非AGS切圖的地圖時,均可使用這個參數值。

可是,當用AGS所切之圖時,此參數變成了:2.54000508001016。這多是AGS本身內部定義的一個轉換參數。

根據參數的不一樣,當咱們換算經緯度座標系下的比例尺時,要根據不一樣的參數來進行轉換。當是AGS地圖時,則爲:resolution*96/2.54000508001016。

8.總結

   在瞭解屏幕上1像素表明實際距離多少是怎麼算出來以後,咱們能夠進入下一章節了——根據地理範圍換算出瓦片行列號的原理。

敬請你們持續關注,我將爭取每一到兩週作一次更新,若是工做繁忙,可能更新時間還會延後。這一系列我將大體寫出20到25篇文章,其中涉及到原理,設計,實現方面的知識,其中可能有不少不對的地方,原諒我是一個在GIS領域只走了小小的一步的新人,原諒我資質的愚笨,容我冒昧的總結前人的成果,結合個人所思所想,和你們一塊兒分享。

相關文章
相關標籤/搜索