基于webgl高性能地图解决方案:二次开发keper.gl地图可视化分析工具 - openstreetmap街道地图离线部署(一)

离线部署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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值