搭建tileserver-gl地图服务
前言
内容包括
1. 搭建openstreetmap地图服务(源自openstreetmap官方搭建教程)
2. 搭建tileserver-gl地图服务(源自openmaptiles官方搭建教程)
(没错,我就是一个官方搬运工,哈哈,不过重点不是教程,而是我在搭建过程中踩的坑,希望能对你有所帮助)
全程干货较多,阅读前建议具备以下知识:
1. openstreetmap相关知识
2. docker和docker-compose方面的知识
搭建tileserver-gl地图服务(源自openmaptiles官方搭建教程)
搭建tileserver-gl地图服务主要分为两个部分讲解:
1. 生成在线可缩放矢量切片地图数据
2. 搭建tileserver-gl地图服务
生成在线可缩放矢量切片地图数据
概述
搭建tileserver-gl地图服务,需要可以运行的.mbtiles文件,openmaptiles官方提供了一个可以生成一个开源项目openmaptiles,可以支持生成.mbtiles文件。
设置代理
由于在制作数据过程中,需要访问https://query.wikidata.org/,获取本地化数据。那么对于国内的ip,需要事先在linux上设置代理,安装一个楼梯(这样描述不知道能不能听懂,真麻烦)。
为docker设置代理
mkdir ~/.docker
vim ~/.docker/config.json
>>>
{"proxies":{"default":{"httpProxy": "http://192.168.59.100:8118","httpsProxy": "http://192.168.59.100:8118","noProxy": ""}}
}
>>>
部署步骤
代理设置完成了,下面就开始进入正式的数据生成步骤:
1. 克隆openmaptiles项目并且编译
git clone https://github.com/openmaptiles/openmaptiles.git
cd openmaptiles
2. 修改生成的地图缩放级别(MAX_ZOOM参数,值越大,生成的地图数据越详细,最大为14),MAX_ZOOM默认的值为7,生成的地图数据不够详细,
vim .env
将MAX_ZOOM改为14(生成的地图数据越详细,花费的时间越久)
3. 为openmaptiles-tools设置代理
vim docker-compose.yml
在openmaptiles-tools的environment中添加设置的代理
我本机的代理是8118端口,因此就添加了
http_proxy: http://192.168.59.100:8118https_proxy: http://192.168.59.100:8118HTTP_PROXY: http://192.168.59.100:8118HTTPS_PROXY: http://192.168.59.100:8118
4. 编译项目,直接执行make命令
make
5. 下载地图数据,建议去这个网站下载https://download.bbbike.org/,选择要下载的地图区域,复制链接,在迅雷中下载,下载之后将数据上传到openmaptiles/data文件夹下。当然,也可以使用官方教程中的下载方式
make download area=albania
但是这种方式下载非常慢。(如果是测试使用的话,尽量下载较小的pbf地图区域数据,否则整个执行周期会非常长)
6. 到这步之后,官方提供了一个快速开始的方式,不过不利于理解,可以跳过这一步,执行下面的非快速开始方式
./quickstart.sh <area>
#<area> 表示地图的区域,你下载的pbf是什么名字,这里就写什么名字
#e.g:./quickstart.sh albania-latest
7. 非快速开始方式
启动postgres数据库容器
make start-db
从OpenStreetMapData, Natural Earth and OpenStreetMap Lake Labels导入外部数据
make import-data
将pbf数据导入数据库中
make import-osm
make import-borders
使生成地图数据支持多种语言,并且实现语言本地化,比如属于中国的地图数据在地图上显示中文(在这一步之前)
make import-wikidata
每次修改层SQL代码时,运行make和make import-sql(按着步骤运行)
make clean
make
make import-sql
现在您可以生成矢量图块了。默认情况下,.env将整个星球BBOX指定为缩放0-7,但运行generate-dc-config会分析数据文件并设置BBOX参数以限制图块生成。
make generate-dc-config # compute data bbox -- not needed for the whole planet
make generate-tiles # generate tiles
剩下的就是等待命令执行完成了
通过make创建tileserver-gl地图服务
make start-tileserver
不过这样不能后台运行。
搭建tileserver-gl地图服务
创建/data/maptiler-data文件夹,将openmaptiles/data中生成的tiles.mbtiles文件移到/data/maptiler-data文件夹中
docker run --rm -d -v /data/maptiler-data:/data -p 9001:80 maptiler/tileserver-gl
访问的时候,ip和端口换成自己的
http://ip:端口/
前端技术支持
- Leaflet
- OpenLayers
- ArcGIS
- Mapbox GL JS
可以通过这些技术,可以让地图实现自己需要实现的效果,比如根据经纬度在地图上标记点等。
槽点
1. 这种方式生成.mbtiles数据超级慢,我尝试着用一个190m的pbf文件(ireland-and-northern-ireland.osm.pbf),将MAX_ZOOM设置为14,生成对应区域的.mbtiles文件,在linux系统中跑了6小时四十分钟,要知道整个全球的数据有53G。暂时不考虑数据量大了之后生成数据的效率会不会进一步变快或者变慢,也暂时屏蔽硬件带来的差异,那么将整个星球的数据跑下来需要76天左右,这还得祈祷运行过程中不能出问题。
2. 官网可以获取mbtiles格式的数据,不过面向商用是需要money的,附购买地址
3. 也可以下载官方的整个星球的免费数据,不过数据比较老,是2017年的数据,对地图数据有精确要求的不建议使用
如果不想花钱,可能的解决方案
1. 将生成的MAX_ZOOM的值调小
2. 换更好的硬件设备或许会提高转换效率
3. 对源代码进行编辑,提高转换效率
4. 查找官方文档,是否有可以提高转化效率的方法
5.下载多个国家或者州的数据,在多台服务器上跑,分别跑出对应的.mbtiles数据,然后使用tippecanoe整合到一个.mbtiles文件中。
6. 使用tilemaker生成.mbtiles文件。tilemaker也可以生成能运行的地图数据,数据的转换速率还挺快的,但是生成的数据少医院,商家等建筑图层 。同时该项目的生态不是很好,tilemaker运行过程中,可能会出现一些意想不到的问题,或者生成的数据有问题,有些图层的标签(名称)无法正常显示。tilemaker适合自己拿来研究,在他的基础上进行改进。
搭建openstreetmap地图服务
传送门
源码与文档地址
OpenMapTiles源码GitHub地址:https://github.com/openmaptiles/openmaptile
tileserver-gl源码GitHub地址:https://github.com/maptiler/tileserver-gl
Openstreetmap数据源1(可下载星球地图数据):https://download.bbbike.org/
openstreetmap数据源2(下载指定地区数据):https://download.geofabrik.de/
OpenMapTiles文档:https://openmaptiles.org/docs/
TileServer GL的文档:https://tileserver.readthedocs.io/en/latest/
tileserver-gl镜像地址:https://hub.docker.com/r/klokantech/tileserver-gl
openmaptiles-server镜像地址:https://hub.docker.com/r/klokantech/openmaptiles-server
搭建tileserver-gl地图服务相关推荐
- 如何搭建谷歌离线地图服务?
离线地图分为两种:一种叫"金字塔瓦片"数据,一种叫"矢量地图数据".我们看的在线地图比如,百度,谷歌,高德等等网页上的地图,都是金字塔瓦片:另外一种是手机上用来 ...
- 搭建离线瓦片地图服务并用QGIS显示离线地图
需求的提出: 由于业务需求,展示GIS时,不能连接互联网,也就是说不能调用互联网上提供的地图服务. 因为不能联网,所以必须在局域网或本机上搭建离线瓦片地图服务.本文讲述如何搭建离线瓦片 ...
- 3、 如何搭建高德离线地图服务
谷歌(百度.高德)离线地图开发环境搭建 发布时间:2018-01-17 版权: 1.说明 离线地图开发环境支持谷歌地图.百度地图.高德地图等等所有常用地图类型,支持在局域网内的地图部署.二次开发. 2 ...
- 添加离线地图服务(搭建内网地图服务)
搭建离线地图服务主要是两个步骤:一是:离线地图服务需要的地图数据:二是:将离线地图数据发布成地图服务:只有做好这两步,才能有接下来的二次开发和行业应用. 前面已经介绍了安装离线地图服务器程序 以及 离 ...
- 如何搭建高德离线地图服务?
搭建离线地图服务主要是两个步骤:一是:下载离线地图服务需要的地图数据:二是:将下载的离线地图数据发布成地图服务:只有做好这两步,才能有接下来的二次开发和行业应用. 前面已经介绍了安装离线地图服务器程序 ...
- Tornado+Pyecharts+LayUI搭建个人足迹地图服务
在之前的文章 Python之绘制个人足迹地图 中,笔者采用Pyecharts和手动修改HTML代码的方式实现了个人足迹地图.本文将会介绍利用Tornado+Pyecharts+LayUI来搭建个人 ...
- 如何搭建高德离线地图服务
1.说明 离线地图开发环境支持谷歌地图.百度地图.高德地图等等所有常用地图类型,支持在局域网内的地图部署.二次开发. 2.实现 第一步:下载安装离线地图开发环境 BIEGMAP离线地图服务器(开发版) ...
- 使用GeoServer搭建自己的地图服务
利用geoserver简单几步即可将shp.geojson等空间矢量数据发布成服务和,分享给小伙伴们. wms动态地图服务,适合数据量不太大.需要空间查询和属性查询,地图上点击单个要素用户交互的场景. ...
- 开源方案搭建可离线的精美矢量切片地图服务-3.Mapbox个性化地图定制入门
系列文章目录 开源方案搭建可离线的精美矢量切片地图服务-1.开篇(附成果演示地址) 开源方案搭建可离线的精美矢量切片地图服务-2.PostGIS+GeoServer矢量切片 开源方案搭建可离线的精美矢 ...
- 【GeoServer + MapBox-GL 搭建离线矢量切片地图服务】多图详细流程 + 踩过的坑总结
文章目录 前言 Geoserver 安装 前期工作 JDK的安装 安装 GeoServer GeoServer 的使用 进入 GeoServer 界面 使用 GeoServer 发布矢量切片离线地图 ...
最新文章
- 深入Phtread(三):线程的同步-Condition Variables
- php开发问题及解决方案,PHP开源开发框架ZendFramework使用中常见问题说明及解决方案...
- TensorFlow for Hackers - Part II
- html分为哪两种,css伪类分为哪几种
- c++基础(part1)--cpp简介
- 计算机应用与科学专业简介,计算机应用技术学科专业简介
- 二十世纪最伟大的算法,你了解哪个?
- Oracle 19.6 的有趣BUG:可能引发 CLOB 存储数据的丢失
- JVM学习-分代收集算法
- 树莓派竟出微控制器了!Raspberry Pi Pico 只需 4 美元!
- 基于单片机和语音识别的智能家电控制平台
- 匈牙利算法及KM算法详解
- 网络安全学习笔记-入侵检测系统IDS
- 上野千鹤子名誉教授的东大祝辞中提到的“元知识”是什么?
- AKA传奇和亚嵌那些事
- 转载:解决 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passw
- stm32cubemx读写SDRAM-W9825G6KH
- 拟推荐全省文物系统先进_全国先进集体事迹材料 全国文化系统先进集体拟推荐对象简要事迹材料 精品...
- JAVA学习日记每天进步一点点之集合类
- ***测试第一弹:信息刺探
热门文章
- cadence17.4如何修改快捷键(修改env文件,实现空格翻转)
- 音频降噪 java_流音频中的降噪和压缩
- 金融统计分析python论文_比较好写的本科金融专业论文题目 本科金融专业论文题目怎么取...
- 一名Java大佬跳槽之旅,离开京东,14面面试经验和收获
- Matplotlib坐标轴格式
- Cocos2d-x 实现地图滚动,解释缝隙产生的原因以及解决方案
- Matplotlib:面积图、填图、饼图
- C语言:初学者2--求π的值(3种方法)
- ECLIPSE中添加TPTP插件
- 【应急基础】————2、开机启动项