发布自己的mapbox矢量地图

一、前言
mapbox 作为一款开源的地图开发平台,优势兼具百度、高德等互联网地图平台和Arcgis、Supermap 等企业级地图平台的特点,是很多企业作为地图项目开发的基础平台,这里根据实际的工作经验,来谈一谈如何发布自己的mapbox矢量地图。并通过mapbox.js调用进行下一步的开发。

二、整体流程
发布mapbox 需要很多第三方的软件平台依赖,下图是我整理的具体发布流程图,根据各个流程的主环节,分别对其中用到的软件进行介绍: 


三、原始数据
原始数据的入口是Geojson格式的文件,关于这种格式文件的详细介绍,推荐这篇博客: 
https://blog.csdn.net/yaoxiaochuang/article/details/53117379 
大家可以用商业的Arcgis、Supermap 等软件对地理数据进行geojson格式文件的导出。

四、软件介绍
1.tippecanoe 
github地址:https://github.com/mapbox/tippecanoe,负责将geojson数据转换成mbtiles文件。 
安装说明:

git clone git@github.com:mapbox/tippecanoe.git
cd tippecanoe
make -j
make install


使用说明: 
使用命令 

tippecanoe -z 15 -Z 0 -ps -Bg -o out.mbtiles input.geojson 


参数说明

参数作用
-z生成数据最大层级
-Z生成数据最小层级
-ps不要简化线条和多边形
-Bg自动抽稀,避免单个瓦片要素过多
-o输出文件路径


示例 

tippecanoe -z 17 -Z 6 -o river.mbtiles river.geojson 


2.tileserver-gl-light 
负责mbtiles数据发布。tileserver-gl依赖较多的本地库文件,不容易编译安装,tileserver-gl-light是tileserver-gl的缩减版,去除了本地库依赖,可以通过npm直接安装。 
安装说明: 
安装命令:

npm install -g tileserver-gl-light

 
Docker安装:

docker run --rm -it -v $(pwd):/data -p 8080:80 klokantech/tileserver-gl 


使用说明:

使用命令:

tileserver-gl-light [mbtiles]文件 [option] 


参数说明:

参数作用
-p指定端口号,默认8080
-c指定配置文件,配置文件是json格式文件


示例

tileserver-gl-light river.mbtiles -p 3000
tileserver-gl-light -c config.json -p 3000


启动完成后可到l浏览器打开ip:发布端口进行预览 
 
 


3.maputnik 
负责接入发布的mbtiles数据,并进行可视化风格配置。配置完成后,可以导出样式文件,由于这个软件的安装使用相对复杂,单独有一篇博客介绍。

五、使用地图
这里使用mapbox GL JS来调用我们发布自己风格和数据的地图

<div id='map' style='width: 400px; height: 300px;'></div>
<script>
mapboxgl.accessToken = 'undefined';
var map = new mapboxgl.Map({
    container: 'map',
    style: '自己发布风格地图地址'
});
</script>

Cesium是一个基于WebGL的3D地图引擎,可以加载各种类型的地理数据。要加载Mapbox矢量瓦片,您可以按照以下步骤进行操作: 1. 获取Mapbox矢量瓦片的URL。您可以在Mapbox Studio中创建和发布矢量瓦片,然后获取其URL。 2. 创建一个Cesium的ImageryProvider对象。您可以使用Cesium的UrlTemplateImageryProvider类来实现这一点,该类可以从一个URL模板加载图像数据。例如: ```javascript var imageryProvider = new Cesium.UrlTemplateImageryProvider({ url: 'https://api.mapbox.com/styles/v1/{username}/{style_id}/tiles/256/{z}/{x}/{y}?access_token={access_token}', credit: 'Mapbox', minimumLevel: 0, maximumLevel: 22, subdomains: ['a', 'b', 'c'], tilingScheme: new Cesium.WebMercatorTilingScheme(), rectangle: Cesium.Rectangle.fromDegrees(-180.0, -85.06, 180.0, 85.06), customTags: { username: 'mapbox', style_id: 'styleid', access_token: 'your_access_token' } }); ``` 在上面的代码中,您需要将URL模板替换为您的Mapbox矢量瓦片的URL,以及您的Mapbox用户名、样式ID和访问令牌。 3. 创建一个Cesium的ImageryLayer图像图层对象,并将ImageryProvider对象作为参数传递给它。例如: ```javascript var imageryLayer = new Cesium.ImageryLayer(imageryProvider); ``` 4. 将ImageryLayer对象添加到Cesium的Viewer视图器中,以便在地图上显示它。例如: ```javascript viewer.imageryLayers.add(imageryLayer); ``` 通过上述步骤,您就可以将Mapbox矢量瓦片加载到Cesium中,实现在3D地图上显示矢量数据的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值