osm离线底图服务
一、搭建地图的准备知识
1.先了解各个地图供应商使用的坐标系,包括地理坐标和桌面坐标
osm地图: 地理坐标是WGS84坐标系、桌面坐标是墨卡托坐标系
2.了解docker,创建镜像和容器
二、搭建准备
1.OSM搭建地图底图服务的通过查找资源,搭建教程的官网是:https://switch2osm.org/serving-tiles/
搭建方式有:ubuntu或者docker的方式
2.首选docker方式搭建,因为docker hub已经有人把搭建好的镜像上传到仓库了,我搭建的话,只需要去到osmbuilding的官网下载对应底图区域的数据资源,然后依据docker打包镜像和容器,就可以搭建完成底图服务
3.地图数据资源下载
osmbuiliding示例官方网站:https://osmbuildings.org/documentation/viewer/
osmbuilding地图数据资源下载网址:https://www.openstreetmap.org/#map=4/36.96/104.17
根据需要下载的地方的数据,选择性进行下载,下载china-latest.osm.pbf----中国底图的数据
三、开始搭建
由于使用docker方式进行搭建,建议先优先查看官网搭建教程docker版本,然后再到此网站查看别人搭建好的docker镜像,学习搭建教程
1.搭建教程的官网是:https://switch2osm.org/serving-tiles/ ---查看官方docker 搭建教程
2. 查看docker hub已有镜像搭建教程--更详细
去到docker hub官网 搜索openstreetmap https://registry.hub.docker.com/search?q=openstreetmap&type=image
找到星标比较多的镜像,或者根据搭建官网提供的教程搜索:overv/openstreetmap-tile-server:1.3.10 run
搭建步骤:
查看https://registry.hub.docker.com/r/overv/openstreetmap-tile-server,搭建教程
实际搭建
一、 拉取overv/openstreetmap-tile-server镜像到本地仓库
docker pull overv/openstreetmap-tile-server
1.此容器允许您轻松设置给定.osm.pbf文件的 OpenStreetMap PNG 切片服务器。它基于来自switch2osm.org的最新 Ubuntu 18.04 LTS 指南。
2.我们只需要把我们想展示的数据导入到切片服务器的PostgreSQL,然后运行docker切片服务器即可搭建我们想要的osm底图服务
二、下载地图pbf数据源文件
1.wget方式
示例:下载china的地图tile的pbf文件
wget https://download.geofabrik.de/asia/china-latest.osm.pbf
2.官网下载:
地址:https://download.geofabrik.de/
三、创建docker卷 - 可选 (导入pbf文件数据时,如果第二个-v 挂载指定了宿主机指定目录,可不创建docker卷)
docker volume create openstreetmap-data
openstreetmap-data 卷是用来保存将包含 OpenStreetMap 数据(步骤一下载的pbf文件数据)的 PostgreSQL 数据库
使用的导入命令:
docker run \ -v /home/osm/china-latest.osm.pbf:/data.osm.pbf \ -v /home/osm/openstreetmap-data:/var/lib/postgresql/12/main \ overv/openstreetmap-tile-server \ import
通过-v 指定了宿主机目录(指定目录/home/osm/openstreetmap-data)和容器的目录,此步骤,创建docker卷可以不用创建
四、安装并导入下载的pbf文件数据
(1)导入pbf文件数据
docker run \ -v /home/osm/china-latest.osm.pbf:/data.osm.pbf \ -v /home/osm/openstreetmap-data:/var/lib/postgresql/12/main \ overv/openstreetmap-tile-server \ import
1.第一个”-v”,把/home/osm/china-latest.osm.pbf数据文件,挂载到/data.osm.pbf下.
2.第二个”-v”,把/home/osm/openstreetmap-data,挂载到/var/lib/postgresql/12/main下。指定了/home/osm/openstreetmap-data宿主机的路径,方便查看openstreetmap-data内容
3.pbf文件较大的情况下,parser存储到pgsql的过程会比较长
4.容器退出且没有错误,则数据成功导入
(2)自动更新-导入的pbf文件数据(可选)
docker run \ -e UPDATES=enabled \ -v /home/osm/china-latest.osm.pbf:/data.osm.pbf \ -v /home/osm/openstreetmap-data:/var/lib/postgresql/12/main \ overv/openstreetmap-tile-server \ import
1.UPDATES=enabled变量,如果您的导入是地球的提取物并且具有与其关联的多边形边界,例如来自 geofabrik.de 的那些,那么可以将您的服务器设置为自动更新
五、启动 tile 服务器
docker run --name openstreetmap -p 6004:80 -v /home/osm/openstreetmap-data:/var/lib/postgresql/12/main --restart=always -d overv/openstreetmap-tile-server:1.3.10 run
1.—name,指定运行的docker容器name(openstreetmap)
2.-p,根据虚拟机想开放的端口,自己选择映射的端口。6004是宿主机端口,80是容器端口
3.—restart=always,Docker 重启时,容器自动启动
4.-d,指定docker后台运行
六、访问
1.osmbuildings的访问规则是:https://ip:port/tile/{z}/{x}/{y}.json 如果要在页面使用,需要配置这个访问路径。osmbuildings.js有自己的xyz的算法。
2.查看底图服务
直接访问宿主机的地址即可查看,如:http://宿主机ip:6004、宿主机是虚拟机的,此处可能需要做下宿主机的端口映射