mapbox 接入高德矢量地圖實戰


Mapbox 作為現如今比較流行的地圖框架為我們提供了漂亮的個性化地圖,在平常的使用過程中可以方便的接入高德/谷歌等矢量切片地圖。由於Mapbox地圖數據來源於Open Street Map等國外廠商,中國地圖POI/道路等信息都不全,造成在實際項目中使用很不精細。對比國內互聯網地圖廠商,百度和高德都提供了自有格式的矢量地圖,如何解析其數據,再將數據PBF化,就是我們重點研究的問題了。本文作為學術研究,將探討下解析高德矢量地圖,並PFB化。

  1. 打開高德地圖,我們可以看到地圖數據有以下兩種請求格式:
    1. mapType=normal&v=2&style=5&rd=1&flds=poilabel,roadlabel&t=  
    2. mapType=normal&v=2&style=5&rd=1&flds=region,building,road&t=  
    

第一種格式是用來請求標志類的,包括POI 道路標注,第二種數據格式是用來請求區域、建築面數據、道路信息的。

  1. url 參數t后面就是請求的行列號和地圖層級。**注意:**這個行列號是經過加密的。
  2. 請求第一種格式的URL,通過分析返回的數據結構,可以得到每組JSON 數據是通過|連接的,從下標為1的數據進行JSON反序列化,得到的POI 和道路標注數據。如下圖

再進一步研究得出下標為0的就是POI數據,下標為1的是標注的顏色(也是加密的),下標為4的就是POI 的分類,分類為labels:pois的興趣點,二級分類是下標為5的數據。 分析POI數據如下圖

下標為0 的是標注名稱,下標為1的是坐標信息(加密),下標為2 為文字偏移量,下標3為POI 的圖片的位置和偏移量。
4. 過同樣的分析手段,我們得到了高德地圖的各個元素數據,接下來進行PBF序列化數據,在這之前先考慮下Mapbox的Style樣式問題。

  1. sprite Json 文件和圖片文件。高德地圖中POI 所有的圖標都在一個文件中icon-normal-small.png,每個圖標的大小為24×24,計算POI 圖標生成sprite Json文件。
  2. mapbox 圖層大致可分為地圖背景、region、road、building、poi、road_label,當然根據高德數據格式可以划分的更細,比如可以將poi 分為19個小類和區域標注、城市、區縣鄉鎮,村庄等。這樣的分類和高德提供的風格化地圖樣式一樣的了。 同時我們可以加入自定義的行政區背景地圖使得地圖更加的漂亮。

解決了以上兩個問題后,就可以進行PBF序列化數據 新建java web 項目,引入java-vector-tile jar 包,編寫相關代碼,發布服務,再使用mapbox 接入服務,此致mapbox成功接入了高德矢量化地圖。

遺留問題:
1)高德地圖中將道路和道路標注分開,且道路標注是多個文字,使得mapbox 中道路的文字顯示不全。
2)道路數據不夠精細,導致地圖在大比例尺下道路與道路之間有間隙。
3)建築物鋸齒過於明顯。
4)對於區縣繪制矩形底圖需要動態計算暫時未實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM