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 道路标注,第二种数据格式是用来请求区域、建筑面数据、道路信息的。

  2. url 参数t后面就是请求的行列号和地图层级。注意:这个行列号是经过加密的。
  3. 请求第一种格式的URL,通过分析返回的数据结构,可以得到每组JSON 数据是通过|连接的,从下标为1的数据进行JSON反序列化,得到的POI 和道路标注数据。如下图

再进一步研究得出下标为0的就是POI数据,下标为1的是标注的颜色(也是加密的),下标为4的就是POI 的分类,分类为labels:pois的兴趣点,二级分类是下标为5的数据。
分析POI数据如下图

下标为0 的是标注名称,下标为1的是坐标信息(加密),下标为2 为文字偏移量,下标3为POI 的图片的位置和偏移量。

  1. 过同样的分析手段,我们得到了高德地图的各个元素数据,接下来进行PBF序列化数据,在这之前先考虑下Mapbox的Style样式问题。

A) sprite Json 文件和图片文件。高德地图中POI 所有的图标都在一个文件中icon-normal-small.png,每个图标的大小为24×24,计算POI 图标生成sprite Json文件。

B) mapbox 图层大致可分为地图背景、region、road、building、poi、road_label,当然根据高德数据格式可以划分的更细,比如可以将poi 分为19个小类和区域标注、城市、区县乡镇,村庄等。这样的分类和高德提供的风格化地图样式一样的了。
同时我们可以加入自定义的行政区背景地图使得地图更加的漂亮。

解决了以上两个问题后,就可以进行PBF序列化数据
新建java web 项目,引入java-vector-tile jar 包,编写相关代码,发布服务,再使用mapbox 接入服务,此致mapbox成功接入了高德矢量化地图。

遗留问题:
1)高德地图中将道路和道路标注分开,且道路标注是多个文字,使得mapbox 中道路的文字显示不全。
2)道路数据不够精细,导致地图在大比例尺下道路与道路之间有间隙。
3)建筑物锯齿过于明显。
4)对于区县绘制矩形底图需要动态计算暂时未实现。

最新文章

  1. JSP学习笔记
  2. html页面元素事件丢失
  3. Python.with.context-manager
  4. nefu558 bfs
  5. NCPC 2013: Dance Reconstruction
  6. Percona-Galera-Monitoring-Template监控模板说明
  7. UVa 10701 - Pre, in and post
  8. 1.Asp.net处理请求的流程
  9. python基础之语句结束
  10. VC++ 编译过程
  11. A Game of Thrones(11) - Daenerys
  12. remote staspack
  13. Beta的计划和人员的变动
  14. 动手开发一个名为“微天气”的微信小程序(上)
  15. print与printf的区别
  16. gets()的替代问题
  17. asp.net 使用一般处理程序和ajax post实现登录以及记住密码
  18. WPF编程,通过Double Animation动态旋转控件的一种方法。
  19. Python实现鸢尾花数据集分类问题——基于skearn的SVM
  20. Linux 搭建Hadoop集群错误锦集

热门文章

  1. jQuery的slicebox插件实现3D翻转轮播效果
  2. Linux下的ACL
  3. 树形结构JSON的实现方法
  4. css样式小框架
  5. Windows ToolTips简要介绍(转)
  6. Generator函数的语法
  7. 通过OpenGL ES在iOS平台实践增强现实
  8. 使用timeit模块 测试两种方式生成列表的所用的时间
  9. 非MFC工程中使用MFC库
  10. Java解决跨域的方案