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)对于区县绘制矩形底图需要动态计算暂时未实现。

mapbox 接入高德矢量地图实战的更多相关文章

  1. Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作

    刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息            使用的Unity ...

  2. ArcGIS Javascript API 加载高德在线地图扩展

    利用ArcGIS JavaScript API加载高德在线地图的扩展 /** * Created by WanderGIS on 2015/7/15. */ define(["dojo/_b ...

  3. jQuery Mapael – 呈现动态的矢量地图

    jQuery Mapael 是基于 Raphael.js 的一个 jQuery 插件,可以显示动态矢量地图.例如,使用 Mapael 可以显示国家能够点击的世界地图.此外,你可以用圈,方形或者图片来标 ...

  4. 关于如何使用ehcarts2加载svg矢量地图并自定义县级内部乡镇轮廓

    项目需求:显示县级内部的乡镇一级地图的轮廓! 效果预览: 阻碍因素:echarts不提供县级以下乡镇级轮廓. 解决思路: 1.根据资料查找相关县的行政区域图(百度搜索),如本人所制作的浙江省宁波市宁海 ...

  5. vue-amap | 基于 Vue 2.x 与高德的地图组件

    vue-amap | 基于 Vue 2.x 与高德的地图组件 参考:https://elemefe.github.io/vue-amap/#/

  6. (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图

    (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图 http://www.cnblogs.com/macroxu-1982/archive/2011/09/13 ...

  7. ArcGIS Earth(原谷歌地球)如何获取高精度矢量地图数据?(shp文件/要素类/kml)

    大家好,这次来分享干货.做地理分析的同学,或者需要使用地图却不知道哪里有矢量数据的时候,怎么办呢? 这次,我就告诉大家哪里能自己手工制作矢量点线面数据!注意哦,是自己绘制的. 使用到的软件: ArcG ...

  8. 使用tippecanoe把GeoJSON制作成供mapbox展示的矢量切片vectortile

    本文记录一下把geojson格式的数据制作成本地的矢量切片,并在mapbox中展示的过程. 1.切片 1.1 矢量数据需要先转换为geojson,如果是shp格式可以使用QGIS或者下载shp2gwo ...

  9. Android ---------高德卫星地图绘制多个点和点的点击事件自定义弹窗

    最近开发中,遇到一个多个点绘制,并实现点击事件,出现自定义窗口显示相关信息等功能,所以写了这篇博客. 从后台请求数据,得到多个经纬度,然后绘制在地图上,并实现点击,出现相关信息(自定义弹框实现) 先来 ...

随机推荐

  1. [洛谷P4074][WC2013]糖果公园

    题目大意:给一棵$n$个节点的树,每个点有一个值$C_i$,每次询问一条路径$x->y$,求$\sum\limits_{c}val_c\times \sum\limits_{i=1}^{cnt_ ...

  2. Crash的游戏 [组合+递推]

    题面 思路 问题转化 这个问题的核心在于,我们需要把"加入一个球.拿出一个球"这两个操作转化一下 因为显然两个操作同时进行的话,我们没有办法从单纯的组合意义去分析 我们首先把$m$ ...

  3. thr [树链剖分+dp]

    题面 思路 首先,可以有一个$dp$的思路 不难发现本题中,三个点如果互相距离相同,那么一定有一个"中心点"到三个点的距离都相同 那么我们可以把本题转化计算以每个点为根的情况下,从 ...

  4. 雅礼集训 Day6 T1 Merchant 解题报告

    Merchant 题目描述 有\(n\)个物品,第\(i\)个物品有两个属性\(k_i,b_i\),表示它在时刻\(x\)的价值为\(k_i\times x+b_i\). 当前处于时刻\(0\),你可 ...

  5. 《机器学习实战》读书笔记—k近邻算法c语言实现(win下)

    #include <stdio.h> #include <io.h> #include <math.h> #include <stdlib.h> #de ...

  6. Avito Cool Challenge 2018 :E. Missing Numbers

    E. Missing Numbers 题目链接:https://codeforces.com/contest/1081/problem/E 题意: 现在有n个数(n为偶数),但只给出a2,a4.... ...

  7. 向mysql中批量插入数据的性能分析

    MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下   CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 5 ...

  8. linux mint 自动挂载windows的D盘和E盘

    终端敲udisksctl mount -p block_devices/sda后双击tab键补全分区,如下:    如我的E盘是sda6,执行     udisksctl mount -p block ...

  9. Winform 在DataGrid中签入Combo

    背景 最近看了Winform在DataGrid中怎么嵌入Combo,想到平时项目中写到的一些临时小工具,经常用配置参数,有些配置是简单的地址或文本,有些则是类似1代表SQL,2代表Oracle等.于是 ...

  10. 转载:GCC 提供的原子操作

    转载自:GCC 提供的原子操作 GCC 提供的原子操作 gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作. 其声明如下: type __sync_f ...