廢話
爲啥一堆人都說墨卡託投影是從圓心向圓柱面發射線, 反正我覺得不是那樣, 不然公式顯然就不對了(也可能是我馬虎), 後來去wiki查了一下, 找到了公式的推導.
公式
x=R(λ−λ0),y=Rln[tan(4π+2φ)].
其中λ是經度, ϕ是緯度(即投影前的座標); x,y是投影后的座標; R是球的半徑; λ0是y軸所在經度
大概感覺是這樣(即廢話裏說的)(但是這個不精確, 不然公式就不是這樣了):
左圖爲側視圖, 中間的球就是原來的座標系, 兩個豎線代表了一個圓柱, 是投影后的座標系. 右圖是圓柱展開後, 最終的座標系.
赤道成爲x軸, 並且在x軸上(經度與x座標)是成比例的(這個是標準的, 下面性質裏有); 選一條經線作爲y軸, 然而要注意, y座標與緯度並不是 正切 的關係. 我們後面推導的目的就是要找到一種把緯度映射到y座標的方式, 使得兩條射線映射前後的角度不變. (我猜正切並不能保證這個關係)
推導
整體思路
性質 -> 用各種方程描述性質 -> 求解
性質
- 保角
- x=R(λ−λ0)
推導
x 的座標映射已經有了(性質2), 我們現在只要推導 y的映射 y(λ,ϕ)
(完全參照wiki)
兩個座標系中角度的表示
每個量在圖中都寫的很清楚了, 直接描述角α,角β(的正切)就可以了:
tanα≈RδφRcosφδλ,tanβ=δyδx,
性質的描述
(注意到ϕ,λ無關(即偏導爲0) 由鏈式法則得dϕdy=∂ϕ∂y x與λ 關係類似, 不嚴謹, 不過大概這麼用吧. 後面的 ′ 就代表對自變量的偏導)
- 保角
1=tanβtanα=x′(λ)y′(ϕ)cosϕ
- x座標與經度成比例
x′(λ)=R
求解
y′(ϕ)=Rsecϕ
積分得到(我沒驗證, 但是都這麼寫, 應該問題不大)
y=Rln(tan(4π+2φ))
谷歌地圖應用
R取1/(2π)即可, 即讓x範圍在0到1之間. y的範圍我們也只取[−0.5.0.5]這個範圍. 谷歌的瓦片座標左上角是(0,0), 每行(每列)有2z個正方形, 做一個簡單的變換即可得到每個正方形的座標(也就是瓦片座標):
xint=[2zx]yint=[2z(1−(y+0.5))]
其中 [x] 代表四捨五入取整
具體怎麼抓, 看參考文章即可.
有一點要注意, 要設置UserAgent
參考
wiki墨卡託投影
一篇抓谷歌地圖的文章
另一篇講墨卡託投影的(第一部分很不嚴謹, 後面沒看)
轉瓦片座標