使用tippecanoe把GeoJSON制作成供mapbox展示的矢量切片vectortile
本文记录一下把geojson格式的数据制作成本地的矢量切片,并在mapbox中展示的过程。
1.切片
1.1 矢量数据需要先转换为geojson,如果是shp格式可以使用QGIS或者下载shp2geojson进行转换。
1.2 使用tippecanoe进行切片,tippecanoe能从大量的 GeoJSON、Geobuf 或 CSV 特征集合中创建矢量瓦片。
在 Mac OSX 系统上安装 tippecanoe 比较简单,直接在 Terminal(终端)中输入下面的代码:brew install tippecanoe 即可。windows平台需要借助Cygwin从源码安装,步骤见文章末尾。
1.3 Cygwin64 Terminal中切换到数据目录,输入:
tippecanoe -o outfile.mbtiles -Z8 -z20 infile.geojson
参数说明: -o outfile 输出的切片,是.mbtiles格式的文件,该文件是一个sqlite库
-Z 是切片的最小zoom, -z 切片的最大zoom
infile可以是多个,这样会按照图层分别存放切片
特别注意,-e 可用于将 tile 写入指定的目录而不是 mbtiles 文件,想要将矢量瓦片发布到 Web 服务的开发者可以使用这个功能(第三部分有介绍)。
参数详细介绍可以参考官方文档。
2.查看
mbtiles格式的查看需要使用mbview,这一个node项目
可以 npm install -g mbview 命令安装后,进入 .mbtiles 目录,输入mbview filename.mbtiles,这是会报缺少token的异常:

于是加入了MAPBOX_ACCESS_TOKEN的参数(可以注册mapbox账号获取token),然而还是报错...

无奈之下看了源码,发现token需要用MapboxAccessToken名称:

修改后,再执行命令,显示启动了服务

同时浏览器也显示切片地图。

浏览器F12可以查看加载的瓦片。

3.展示
mbtiles可以通过node-mbtiles及其他mbtiles-server发布出来,做为数据源给mapbox展示。
本文介绍另外一种使用方式,即不依赖map server 把切片以ZXY文件组织的方式放入web服务器中,mapbox使用形如 http://localhost:9002/laketile/{z}/{x}/{y}.pbf的地址访问。
在1.3部分说过 -e outdir 参数可以将切片放入目录,生成的结果如下图:

然后在nginx中添加以下配置把pbf发布出来:
location /laketile {
alias E:/code/00test/MapBox/mbutil/lake;
add_header 'Access-Control-Allow-Origin' '*';
}
在mapbox中添加代码显示数据:
map.on('load', function(){
map.addLayer({
"id": "lake",
"type": "fill",
"source": {
type: 'vector',
tiles: ['http://localhost:9002/laketile/{z}/{x}/{y}.pbf']
},
"source-layer": "lake",
'layout': {},
'paint': {
'fill-color': '#088',
'fill-opacity': 0.8
}
});
});
打开浏览器,发现没有显示数据,console报 Unimplemented type 3 的错误。

通过不懈努力发现原来是tippecanoe在制作切片进行了gzip压缩,而浏览器不知道.pbf是压缩过的,不过tippecanoe是很强大的,留了很多参数,加上 --pC就可以生成未压缩的切片。
tippecanoe -e lakepbf -pC -Z8 -z14 -f lake.geojson
再次发布、访问就没问题了。这种方式会生成很多小文件,不方便管理,但是对于需要离线部署、数据量不大的情况还是挺有用的,不需要专门的map server,可以和前端代码一起放入nginx。
4.windows平台下安装tippecanoe
1.下载cygwin的安装包setup-x86_64.exe,地址:http://cygwin.com/setup-x86_64.exe
推荐在c盘根目录下创建cygwin目录,把setup-x86_64.exe放入c:\cygwin中
2.安装Cygwin terminal
cmd进入setup-x86_64.exe所在的目录,即c:\cygwin
输入:
setup-x86_64.exe -q -P zlib-devel,libsqlite3-devel,gcc-g++,make,python,git,gdal,python-gdal

中间可能会出现选择下载源的地方,随便选即可。稍等片刻,安装完成后在桌面会创建快捷方式。

打开Cygwin terminal输入: python -m ensurepip

3.下载tippecanoe源码
git clone https://github.com/mapbox/tippecanoe.git

下载后的地址在Cygwin\home\{username}\tippecanoe目录下。
(源码也可以自行到github上下载,在第4步时需要进入自己下载的源码目录)
下载完成后打开源码目录下的makefile文件,注意不要使用notepad,可以用写字板,
找到:
CXXFLAGS := $(CXXFLAGS) -std=c++11
修改为:
CXXFLAGS := $(CXXFLAGS) -std=c++11 -U__STRICT_ANSI__
4.编译安装
在Cygwin terminal中进入tippecanoe源码目录。
如果是使用Cygwin terminal命令下载的源码,直接输入cd tippecanoe即可,如果是自行下载的源码请输入全路径,cd xxx/xxx/tippecanoe
然后依次执行
make
make install
到此安装完毕,详细可参考https://github.com/GISupportICRC/ArcGIS2Mapbox#installing-tippecanoe-on-windows
如有不清楚的地方,欢迎留言交流~
使用tippecanoe把GeoJSON制作成供mapbox展示的矢量切片vectortile的更多相关文章
- 开源方案搭建可离线的精美矢量切片地图服务-6.Mapbox之.pbf字体库
项目成果展示(所有项目文件都在阿里云的共享云虚拟主机上,访问地图可以会有点慢,请多多包涵). 01:中国地图:http://test.sharegis.cn/mapbox/html/3china.ht ...
- 痞子衡嵌入式:MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异. 程序函数库是一个包含已经编译好代码和数据的函数集合,这 ...
- 把UI图里的小图标制作成icon font
一个交互比较多的UI图里面可能会有很多小图标,一般可用sprites图将多个小图标弄成一张大图,或者其它的办法,各种方法的比较可参见博主的另外一篇博客使用css3新属性clip-path制作小图标,本 ...
- 将kindeditor在线编辑器制作成smarty插件
在web开发中,在线编辑器是经常要用到的功能模块,虽说配置在线编辑器没有多大难度,但是每一次编写重复的代码,总是让人感觉不爽. 本篇,就来讲解一下,如何将kindeditor制作成smarty的一个自 ...
- 将jar包制作成docker镜像
将jar包制作成docker镜像1.准备可运行jar包2.建立Dockerfile文件 文件内容: FROM java:8VOLUME /tmpADD xxx-sendemail-0.0.1-SNAP ...
- guava文档API制作成chm文件
将HTML制作成CHM.EXE需要用到一个小工具“HUGECHM”,将HTML打包成CHM文件 1.下载guava的最新的版本,网址:https://github.com/google/guava/w ...
- 用UltraISO把硬盘文件制作成ISO格式
转自:https://wenku.baidu.com/view/0052c88dcc22bcd126ff0cbf.html 用UltraISO把硬盘文件制作成ISO格式方法: 制作硬盘ISO文件步骤一 ...
- 如何把任意网站制作成RSS
如何把任意网站制作成RSS 参照一下链接,多试几次就掌握了. 参考链接:https://feed43.com/step-by-step.html
- 使用ps将短视频制作成gif以进行展示遇到的问题
前言 为了将我们完成的微信小程序小小易校园展示给没用过的用户进行宣传,我们选择将小程序的页面使用过程录屏并制作成GIF来进行展示.制作选择的工具经过初步尝试及对比,最终选择了Adobe Photosh ...
随机推荐
- [Visual Studio] - 使用 Fiddler 时,禁止监控 VSHub 请求的方法
背景 VS + Fiddler 调试 WebAPI,监控请求包含大量 VSHub Request.http://localhost:49161/vshub/bb195f2e0d5c4765b9411f ...
- golang之方法
golang中的方法是作用在指定的数据类型上的(即:和指定 数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是在struct. 方法的使用: type Person struct { Num i ...
- vue的安装配置与项目创建
1,安装vue必须先安装node.js. --------去官网安装node.js 因为npm依赖node.js环境,使用npm的时候需要安装node.js.安装node.js的时候npm会默认安装 ...
- Istio技术与实践6:Istio如何为服务提供安全防护能力
凡是产生连接关系,就必定带来安全问题,人类社会如此,服务网格世界,亦是如此. 今天,我们就来谈谈Istio第二主打功能---保护服务. 那么,便引出3个问题: l Istio凭什么保护服务? l ...
- netty--buffer分配策略
AdaptiveRecvByteBufAllocator 动态分配buffer大小的类. 如果前一次读取完全填满了分配的缓冲区,它将逐渐增加预期的可读字节数.(增加的方式:初始化类的时候,会预先设置好 ...
- oracle 生成随机日期+时间
oracle 生成随机日期+时间 SELECT to_date(TRUNC(DBMS_RANDOM.VALUE(to_number(to_char(to_date('20110101','yyyymm ...
- 在论坛中出现的比较难的sql问题:17(字符分拆2)
原文:在论坛中出现的比较难的sql问题:17(字符分拆2) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必要记录下来 ...
- netcore使用EFcore(第一个实例)
说明:搭建netcore 使用efcore入门教程,跟着这个教程,傻瓜都可以成功!O(∩_∩)O哈哈~,咱们开始吧: 首先介绍下环境: vs2017, netcore2.2, EntityFramew ...
- vue-cli项目开发运行时内存暴涨卡死电脑
最近开发一个vue项目时遇到电脑卡死问题,突然间系统就非常卡,然后卡着卡着就死机了,鼠标也动不了了,只能冷启动.而且因为是突然卡死,没来得及打开任务管理器. 最开始以为是硬盘的问题,但是在卡死几次后, ...
- js入门之内置数组对象 Array
一. 数组 1. 创建数组的两种方式 1. 数组字面量 var array = [] 2. 数组的构造函数创建数组 var array = new Array(); 2. 如何判断一个变量是否是数组 ...