Mapbox 做爲現現在比較流行的地圖框架爲咱們提供了漂亮的個性化地圖,在日常的使用過程當中能夠方便的接入高德/谷歌等矢量切片地圖。因爲Mapbox地圖數據來源於Open Street Map等國外廠商,中國地圖POI/道路等信息都不全,形成在實際項目中使用很不精細。對比國內互聯網地圖廠商,百度和高德都提供了自有格式的矢量地圖,如何解析其數據,再將數據PBF化,就是咱們重點研究的問題了。本文做爲學術研究,將探討下解析高德矢量地圖,並PFB化。java
打開高德地圖,咱們能夠看到地圖數據有如下兩種請求格式:
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 道路標註,第二種數據格式是用來請求區域、建築面數據、道路信息的。web
請求第一種格式的URL,經過分析返回的數據結構,能夠獲得每組JSON 數據是經過|鏈接的,從下標爲1的數據進行JSON反序列化,獲得的POI 和道路標註數據。以下圖
數據結構
再進一步研究得出下標爲0的就是POI數據,下標爲1的是標註的顏色(也是加密的),下標爲4的就是POI 的分類,分類爲labels:pois的興趣點,二級分類是下標爲5的數據。
分析POI數據以下圖
下標爲0 的是標註名稱,下標爲1的是座標信息(加密),下標爲2 爲文字偏移量,下標3爲POI 的圖片的位置和偏移量。框架
A) sprite Json 文件和圖片文件。高德地圖中POI 全部的圖標都在一個文件中icon-normal-small.png,每一個圖標的大小爲24×24,計算POI 圖標生成sprite Json文件。ui
B) mapbox 圖層大體可分爲地圖背景、region、road、building、poi、road_label,固然根據高德數據格式能夠劃分的更細,好比能夠將poi 分爲19個小類和區域標註、城市、區縣鄉鎮,村莊等。這樣的分類和高德提供的風格化地圖樣式同樣的了。
同時咱們能夠加入自定義的行政區背景地圖使得地圖更加的漂亮。加密
解決了以上兩個問題後,就能夠進行PBF序列化數據
新建java web 項目,引入java-vector-tile jar 包,編寫相關代碼,發佈服務,再使用mapbox 接入服務,此致mapbox成功接入了高德矢量化地圖。
url
遺留問題:
1)高德地圖中將道路和道路標註分開,且道路標註是多個文字,使得mapbox 中道路的文字顯示不全。
2)道路數據不夠精細,致使地圖在大比例尺下道路與道路之間有間隙。
3)建築物鋸齒過於明顯。
4)對於區縣繪製矩形底圖須要動態計算暫時未實現。code