Make it works(6) 纯离线的无限级别中国地图解决方
2020-12-12 本文已影响0人
默而识之者
首先,这不是一个教程.而是一个现成的产品包,包括了资源与服务,可以开箱即用.
1. 引入
1.1 它解决了哪些问题
- 下载地图瓦片不可能下载很多级别,有时候遇到特定缩放级别没有地图十分尴尬的问题
- 内网同时有使用矢量和栅格瓦片的场景,无法同时应对的问题
- 后续数据扩展不方便的问题
1.2 它解决不了的问题
- 因为使用的是OSM免费数据,地物相当少,因此大多数情况无法看清详细的地物
- 使用栅格影像时,因为中国地图的样式十分复杂,又是实时渲染,因此渲染时间较长
1.3 注意
- 使用的是OSM数据源,请遵守该数据源的使用许可
- 使用的数据源是2019年的数据,比较旧
- 请严格遵循中国的网络地图相关规范⚠️⚠️⚠️
2. 使用
整个包在这里,密码: i30d.请全部下载到本地.
2.1 部署环境
- 具有Docker和Docker-compsoe的Linux/Windows环境
2.2 组件与原理
- 数据源:OSM的中国区地图包
- 地图渲染引擎:TileServer-gl
- 中国地图渲染样式:osm-liberty
- 字体:思源黑体与思源宋体
原理其实很简单,TileServer提供了一种渲染功能,OSM提供了Tileserver支持的mbtiles格式的底图包.使用了开源的OSM-liberty样式,将里面的字体替换为本地字体,同时,处理为pbf格式的本地字体也由Tileserver服务化,在渲染时调用.
Tileserver的优势是完全兼容Mapbox样式,将矢量数据渲染为png格式的栅格瓦片,当然,当前端就是Mapbox时,也可以直接提供矢量瓦片.这样就同时兼容了两者.
2.3 部署
- 执行
install.sh
导入Tileserver-gl的docker镜像,因为下载非常慢,还可能失败,因此将其放在包中 - 在根目录执行
docker-compose up -d
,即可启动服务
2.4 管理页面
默认设置为8080端口,进入localhost:8080
,就能进入Tileserver的管理页面
其中:
-
GL Style:OSM Liberty的样式JSON,可以直接被Mapbox使用
-
TijeJson:标准的Tilejson文件,是栅格形式的,也能被Mapbox直接使用
-
WMTS:描述XML,兼容其他地图服务
-
XYZ:一个简单的xyz形式的URL路径,可以被直接使用与常用地图引擎
-
Viewer/Vector:以矢量瓦片的形式展示数据
-
Raster:以栅格瓦片的的形式展示数据
-
inspect:直接展示数据,不进行复杂渲染,展示数据中的点线面
2.5 地图效果
可以看见,无论是矢量瓦片,栅格瓦片还是字体瓦片,都来自于本地.完全脱离了互联网.
整体 局部 有地物的局部 没有地物的局部 邻国街道 更远一些的邻国 路网 栅格格式3. 扩展
3.1 修改端口
只需要改动docker-compose.yml
中的端口映射即可
3.2 添加数据
- 将数据制作成mbtiles包并放到
mb
路径下(当然,数据本身可以通过网络访问的就不用了) - 修改
config.json
,添加该数据的映射(同样只针对本地数据) - 添加样式文件的json,并放到
styles
文件夹下 - 修改
config.json
,添加该样式的映射(如果只需要数据,不需要渲染的话可以无需后两步)
4. 结语
这个东西很早就成型并投入使用了,工作变化后,我也再也没有使用/更新过.最近整理了一下,看看能不能帮助更多的人.