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、宿主機是虛擬機的,此處可能需要做下宿主機的端口映射