墨卡託投影推導

廢話

爲啥一堆人都說墨卡託投影是從圓心向圓柱面發射線, 反正我覺得不是那樣, 不然公式顯然就不對了(也可能是我馬虎), 後來去wiki查了一下, 找到了公式的推導.

公式

x=R(λλ0),y=Rln[tan(π4+φ2)]. {\displaystyle x=R(\lambda -\lambda _{0}),\qquad y=R\ln \left[\tan \left({\frac {\pi }{4}}+{\frac {\varphi }{2}}\right)\right].}
其中λ\lambda是經度, ϕ\phi是緯度(即投影前的座標); x,yx,y是投影后的座標; RR是球的半徑; λ0\lambda_0是y軸所在經度
大概感覺是這樣(即廢話裏說的)(但是這個不精確, 不然公式就不是這樣了):
不標準的示意圖
左圖爲側視圖, 中間的球就是原來的座標系, 兩個豎線代表了一個圓柱, 是投影后的座標系. 右圖是圓柱展開後, 最終的座標系.
赤道成爲xx軸, 並且在x軸上(經度與x座標)是成比例的(這個是標準的, 下面性質裏有); 選一條經線作爲yy軸, 然而要注意, y座標與緯度並不是 正切 的關係. 我們後面推導的目的就是要找到一種把緯度映射到y座標的方式, 使得兩條射線映射前後的角度不變. (我猜正切並不能保證這個關係)

推導

整體思路

性質 -> 用各種方程描述性質 -> 求解

性質

  1. 保角
  2. x=R(λλ0)\displaystyle x=R(\lambda -\lambda _{0})

推導

xx 的座標映射已經有了(性質2), 我們現在只要推導 yy的映射 y(λ,ϕ)y(\lambda,\phi)
(完全參照wiki)
兩個座標系下的微面元

兩個座標系中角度的表示

每個量在圖中都寫的很清楚了, 直接描述角α\alpha,角β\beta(的正切)就可以了:
tanαRcosφδλRδφ,tanβ=δxδy,{\displaystyle \tan \alpha \approx {\frac {R\cos \varphi \,\delta \lambda }{R\,\delta \varphi }},\qquad \qquad \tan \beta ={\frac {\delta x}{\delta y}},}

性質的描述

(注意到ϕ\phi,λ\lambda無關(即偏導爲0) 由鏈式法則得dydϕ=yϕ\frac{dy}{d\phi}=\frac{\partial y}{\partial \phi} x與λ\lambda 關係類似, 不嚴謹, 不過大概這麼用吧. 後面的 ' 就代表對自變量的偏導)

  1. 保角
    1=tanαtanβ=y(ϕ)cosϕx(λ) 1 = \frac{\tan \alpha}{\tan \beta} = \frac{ y'(\phi) \cos \phi }{x'(\lambda)}
  2. x座標與經度成比例
    x(λ)=R x'(\lambda) = R

求解

y(ϕ)=Rsecϕ y'(\phi) = R \sec \phi
積分得到(我沒驗證, 但是都這麼寫, 應該問題不大)
y=Rln(tan(π4+φ2)) y=R\ln \left(\tan \left({\frac {\pi }{4}}+{\frac {\varphi }{2}}\right)\right)

谷歌地圖應用

RR1/(2π)1/(2\pi)即可, 即讓xx範圍在0到1之間. y的範圍我們也只取[0.5.0.5][-0.5. 0.5]這個範圍. 谷歌的瓦片座標左上角是(0,0), 每行(每列)有2z2^{z}個正方形, 做一個簡單的變換即可得到每個正方形的座標(也就是瓦片座標):
xint=[2zx]x_{int} = [2^z x] yint=[2z(1(y+0.5))]y_{int} = [2^z (1-(y+0.5))]
其中 [x] 代表四捨五入取整

具體怎麼抓, 看參考文章即可.
有一點要注意, 要設置UserAgent

參考

wiki墨卡託投影
一篇抓谷歌地圖的文章
另一篇講墨卡託投影的(第一部分很不嚴謹, 後面沒看)
轉瓦片座標

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章