离线部署openstreetmap街道地图将原始文件*.pbf文件转换为mapbox地图文件*.mbtiles
1、osm pbf 地图文件下载
可以点击进入只下载某个地区或国家: https://download.geofabrik.de/
全球数据:https://planet.openstreetmap.org/
用种子下载最新pbf:
docker run -v $(pwd)/aria2-downloads:/downloads -v $(pwd)/aria2:/config --rm p3terx/aria2-pro \
aria2c https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf.torrent --dir=/downloads
2、数据准备
必须-海洋和海洋的多边形shp: https://osmdata.openstreetmap.de/
https://osmdata.openstreetmap.de/download/water-polygons-split-4326.zip 解压*.shp文件放到coastline目录中
可选-其他自然相关数据集(Natural Earth):
https://github.com/fraxen/naturalearth_wagnerVII/
https://www.naturalearthdata.com/
3、开始转换
方案一:openmaptiles
1)git clone https://github.com/openmaptiles/openmaptiles.git
2)全文替换 name_de,name:de 为 name_zh,name:zh
3) cd openmaptiles 修改 .env 配置文件: 如 MAX_ZOOM=10
4)下载 海洋多边形shp与Natural Earth的shp放到data目录
5)下载 china.osm.pbf 放到data目录
6)按照README.md文件依次执行如下操作
make clean # clean / remove existing build files
make # generate build files
make start-db # start up the database container.
make import-data # Import external data from OpenStreetMapData, Natural Earth and OpenStreetMap Lake Labels.
# make download area=albania # download albania .osm.pbf file -- can be skipped if a .osm.pbf file already existing
make import-osm area=china # import data into postgres
# make import-wikidata # import Wikidata
make import-sql # create / import sql funtions
make generate-bbox-file area=china # compute data bbox -- not needed for the whole planet
make generate-tiles-pg # generate tiles
方案二:tilemaker
参考地址:
https://blog.kleunen.nl/blog/tilemaker-generate-map
https://zhuanlan.zhihu.com/p/390797186
1)获取配置文件
git clone https://github.com/systemed/tilemaker.git
cd resources
1)配置osm导出的语言
编辑: process-openmaptiles.lua:
tilemaker v2.0 及以下:
function SetNameAttributes(obj)
if obj:Holds("name:zh") then
obj:Attribute("name:latin", obj:Find("name:zh"))
elseif obj:Holds("name:en") then
obj:Attribute("name:latin", obj:Find("name:en"))
else
obj:Attribute("name:latin", obj:Find("name"))
end
OR
function SetNameAttributes(obj)
obj:Attribute("name:latin", obj:Find("name"))
obj:Attribute("name:en", obj:Find("name:en"))
obj:Attribute("name:zh", obj:Find("name:zh"))
2)提取指定区域pbf文件(无需裁剪可跳过)
根据geojson区域数据提取指定区域pbf文件 中国边界提取为例
https://docs.osmcode.org/osmium/latest/osmium-extract.html
下载中国边界数据
http://datav.aliyun.com/portal/school/atlas/area_selector#&lat=31.769817845138945&lng=104.29901249999999&zoom=4
重命名为:china_EPSG4326.geojson
新建 extracts.json
{
"extracts": [
{
"output": "/srv/china.osm.pbf",
"description": "China",
"polygon": {
"file_name": "/srv/china_EPSG4326.geojson",
"file_type": "geojson"
}
}
],
"directory": "/srv/tmp/"
}
开始提取
docker run -v $(pwd):/srv --rm blackmount8/osmium-tool osmium extract \
-v -c /srv/extracts.json \
planet-latest.osm.pbf
3) 开始转换
将 resources下的文件与coastline文件夹放在同一个文件夹下面,执行命令:
docker run -v $(pwd):/srv -v $(pwd)/coastline:/coastline --rm stadtnavi/tilemaker \
/srv/planet-latest.osm.pbf --output=/srv/planet.mbtiles --store=/srv/tmp/ \
--process /srv/process-openmaptiles.lua --config /srv/config-openmaptiles.json \
--threads=10