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