百度地图下载、拼接与坐标改正思路与实例
地圖下載器有很多種,大多數據下載器對用戶有限制,并且下載的數據坐標不能夠辦好與GPS套合,坐標精度不高,作者通過對百度瓦片數據的分塊編號、坐標依移及坐標解算等方面進行分析,自己完成下載、拼圖與坐標解算等,并能夠與GP數據很好套合。
1、百度瓦片規則(注意與GOOGLE 的分幅規則有很大的不同)
(1)經緯度
這個就不多說了,不熟悉的可以翻翻地理書。但需要注意的是即便同是經緯度坐標也可能屬于不同的坐標體系。一般GPS設備獲取的經緯度屬于WGS84坐標系,這是一個比較通用的坐標體系。由于某些原因國內不能直接使用WGS84坐標,因此百度地圖API的經緯度是經過加密偏移的。
(2)平面坐標
前面說過,球面上的形狀需要經過投影才能變換為平面上的形狀,變換后就需要有一個平面坐標系統來描述地圖上某個位置。百度地圖API默認使用墨卡托投影(Mercator Projection),同樣需要注意的是由于投影參數不同,同樣是墨卡托投影也會有所差別。
平面坐標系的原點與經緯度的原點一致,即赤道與0度經線相交的位置:
在百度地圖API中,平面坐標是以最大級別18級為基準的。就是說在18級下,平面坐標的一個單位就代表了屏幕上的1個像素。平面坐標與地圖所展示的級別沒有關系,也就是說在1級和18級下,天安門位置的平面坐標都是一致的。
(3)像素坐標
在第18級下,我們直接將平面坐標向下取整就得到了像素坐標,而在其他級別下可以通過如下公式進行換算(這里取整為向下取整)像素坐標= |平面坐標 ×2 zoom-18|
(4)圖塊坐標(瓦片編號)
百度地圖API在展示地圖時是將整個地圖圖片切割成若干圖塊來顯示的,當地圖初始化或是地圖級別、中心點位置發生變化時,地圖API會根據當前像素坐標計算出視野內需要的圖塊坐標(也叫圖塊編號),從而加載對應的圖塊用以顯示地圖。
百度地圖的圖塊坐標原點與平面坐標一致,從原點向右上方開始編號為0, 0:
如何知道某個位置的圖塊坐標呢?通過如下公式計算即可(這里為向下取整):
圖塊坐標 = |像素坐標 ÷ 256|256實際上是每個圖塊的寬度和高度,我們用像素坐標除以這個數就知道圖塊坐標了。還以天安門為例,在第4級下天安門所在的圖塊編號為:3, 1,而在第18級下,圖塊編號為:50617, 18851
(以上內容整理 jz1108的"百度地圖API詳解之地圖坐標系統“)
2、百度與GOOGLE分塊的比較
百度是從中心點經緯度(0,0)度開始計算瓦片,在第1級時百度將世界地圖分為4塊。
(1)編號規則不同
中心點右上部分(中國地區)占1塊。
谷歌是從左上角經緯度(-180,85.00..)度開始計算瓦片,在第1級時谷歌將世界地圖分為1塊。
(2)圖幅分辨率不同
百度分辨率計算公式:
Double res = math.pow(2,(18 - n)) // n為層數(1-18)
谷歌分辨率計算公式:
Double tileSize=256 //瓦片尺寸(256*256)
Double initialResolution = 2 * math.pi * 6378137 / tileSize //6378137為球體半徑
Double res = initialResolution /math.pow(2,zoom) //zoom為層數(0-21)
?
這是因為在這級百度的地圖分辨率為65536米/像素,分辨率=math.pow(2,(18 - n))。
WGS84球體周長:40075016.685578488,球體周長一半為20037508.34米。
瓦片個數=20037508.34/(65536*256)=1.19。
?
因此GOOGLE 與百度的瓦片基本上對不上號,同一層每一圖塊的地理范圍也不同。
?
?
(以上部分來源于"百度與谷歌地圖瓦片組織方式對比“,修正其中有誤的地方,其中有關計算圖號對應的設想可以商討)
(3)百度地理坐標與實際投影平面坐標不一至
如圖,相應的經緯度在地圖上對應的平面坐標與實際計算值相關較大,此位置大約2公里,不同的位置還不一樣,赤道位置為0。因此要正確使用百度地圖首先要改正百度地圖本身的坐標位置偏移。
(3)地理位置的誤差
在消除上述誤差后,所獲取的地理坐標與實際位置地理坐標還不一樣,這就是國內所謂的BM要求,加入了位置偏差,大約一百多米,要經過計算消除。下圖為13層圖像拼接坐標改正后與GPS數據的疊加效果。
3、百度地圖的下載
百度地圖下載的工具很多,(GOOGLE下載最多,前幾年還使用一個叫"稻歌"的軟件,利用WEB緩存進行處理,有點意思,但下載要瀏覽所有地圖,從而才能在系統緩存中留下地圖鏈接,通過下載地圖鏈接即可下載地圖瓦片,從而實現地圖下載;其它軟件下載通過分析地圖軟件的圖片地址,解算并下載圖片,這種方式下載速度快,但要考慮地圖服務器不斷變動的實際情況,更新相應的地址生成方式。目前比較明確的有百度、GOOGLE、高德、騰訊、OpenStreet等地圖,但一起沒有找到凱立德地圖瓦片的下載地址。
?
?
?
?
總結
以上是生活随笔為你收集整理的百度地图下载、拼接与坐标改正思路与实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python过年倒计时 倒计时窗口 py
- 下一篇: MFC之CString对象的各种函数