在docker中搭建nominatim服务

nominatim推荐配置(https://nominatim.org/release-docs/4.2/admin/Installation/#tuning-the-postgresql-database):
至少需要 2GB 的 RAM,否则安装将失败。对于完整的星球导入,强烈建议使用 128GB 或更多的 RAM。如果您的 RAM 小于 64GB,请不要报告内存不足问题。
对于完整的星球安装,您至少需要 1TB 的硬盘空间。考虑到 OSM 数据库正在快速增长。快速磁盘是必不可少的。建议使用 NVME 磁盘。
即使在一台配置良好的机器上,导入一个完整的行星也需要大约 2 天的时间。在传统的旋转磁盘上,7-8 天更为现实。
我用的配置:
win101909 | i9 10900 | 64G RAM | 1TB nvme
使用docker搭建,分配10个线程,12GB RAM,64G nvme硬盘
我仅导入了中国地图源文件共972MB,而完整地球的源文件有69GB,仅供各位参考

一、安装docker
1.官网下载https://www.docker.com/

2.安装
1)bios需要开启虚拟化技术
2)win10: 控制面板-》程序-》程序和功能-》启用或关闭windows功能-》开启hyper-v
ps:如果有安卓模拟器,可能安卓模拟器无法使用
解决办法是
只开docker时:bcdedit /set hypervisorlaunchtype auto
只开模拟器时:bcdedit /set hypervisorlaunchtype off
3)运行docker desktop installer.exe即可
4)其他:
建议更改docker镜像存储路径,实测导入完数据后容器体积非常大。方法是在docker中修改镜像位置,win10 1909用docker 3.6.0版本可行,用4.19.0版本不行

3.下载源数据osm.pbf文件
如果只下载某些大洲或某些国家,可以从https://download.geofabrik.de/index.html下载,国内直接访问,速度很快
如果你开了**工具,该链接可能被认为是国外的,使用proxy下载速度很慢,可以将geofabrik.de域名放到直连规则里
如果下载全部数据,地址为https://ftp5.gwdg.de/pub/misc/openstreetmap/planet.openstreetmap.org/pbf/planet-latest.osm.pbf(备用https://planet.openstreetmap.org/下载,需要**工具)
如我只下载中国数据,地址为:https://download.geofabrik.de/asia/china-latest.osm.pbf

二.导入数据
docker run -it \
-e PBF_PATH=/nominatim/data/china-latest.osm.pbf \
-e REPLICATION_URL=http://download.geofabrik.de/asia/china-updates/ \
-e IMPORT_STYLE=address \
-p 8081:8080 \
-p 5432:5432 \
-v d:/nominatim:/nominatim/data \
--name nominatim \
mediagis/nominatim:4.2
说明:
1)PBF_PATH参数可以用已经下载好的源文件,否则用PBF_URL=xx,就需要临时下载
2)REPLICATION_URL为更新文件,全球的地址为https://ftp5.gwdg.de/pub/misc/openstreetmap/planet.openstreetmap.org/replication/day/,可以不要,那么以后更新的数据都没有了
3)8080为nominatim的web api端口
4)5432为postgresql的数据库端口(其库名为nominatim,密码为qaIACxO6wMR3,具体可以看容器的日志)
5)将本地d:/nominatim映射到容器中/nominatim/data
ps:
a:可以先不指定REPLICATION_URL,以后再指定吗?
可以的,对于国内开发者我更推荐这种方式,具体操作是,先不指定REPLICATION_URL启动容器,然后在容器中执行
sed -i "s|__REPLICATION_URL__|更新链接|g" /nominatim/.env
docker exec -it 58 sudo -u nominatim nominatim replication --project-dir /nominatim --init
docker exec -it 58 sudo -u nominatim nominatim replication --project-dir /nominatim --once(可选once|continuous|catch up,参考官方文档)
b:若使用过程中REPLICATION_URL的链接挂了怎么办?(挂了之后程序容器启动不了)
/nominatim/.env文件保存里该链接位置,修改其中的NOMINATIM_REPLICATION_URL保存重新运行即可,镜像中没有vim/vi工具,需要通过docker cp方式放到本地修改然后再放到容器里

 或者在容器启动起来挂了之前,打开容器终端,赶紧修改链接位置sed -i "s|旧链接|新链接|g" /nominatim/.env,即可,手速够快无需重启

c:若链接挂了没有新的更新链接了怎么办?

通过docker cp方式将/app/start.sh放到本地,删掉脚本中关于更新的部分,以后就成离线版本的了

 

三、使用服务(参考https://nominatim.org/release-docs/4.2/api/Overview/)
nominatim服务提供以下API:
/search - 按名称或类型搜索 OSM 对象
/reverse - 按位置搜索 OSM 对象
/lookup - 通过 ID 查找 OSM 对象的地址详细信息
/status - 查询服务器状态
/deletable - 列出已在 OSM 中删除但在 Nominatim 中保留以防意外删除的对象
/polygons - Nominatim 检测到的破碎多边形列表
/details - 显示对象的内部细节(仅用于调试)
需要说明的是openstreetmap是基于wgs84的坐标,如果你使用的不是该坐标系,需要转换

如查经纬度对应地址:http://127.0.0.1:8081/reverse.php?lat=36.950008&lon=111.504257

 

本文参考:
https://www.cnblogs.com/nonkicat/p/17222677.html
https://github.com/mediagis/nominatim-docker/tree/master/4.2
https://nominatim.org/release-docs/4.2/

 

ps:
win10 1909用docker 3.6.0版本可以更改镜像的磁盘路径,但是用v4.19.0不行
win10 1909用v4.19.0可以直连宿主机代理,用v3.6.0不行
该问题在使用v4.15.0版本解决

########################### 2023/05/19补充 ###########################
导入全球数据时,数次失败,内存总是爆满,还有就是硬盘占用空间过大,解决办法如下:
使用flatnode.file文件可以大幅度降低导入数据期间的内存占用以及磁盘占用(默认数据存到postgresql,占用空间更大),也有助于提高nominatim的地理编码和反向地理编码服务性能,所以该文件千万别删了!!!
参考命令:
docker run -it --shm-size=12g -e PBF_PATH=/nominatim/osm_data/planet-latest.osm.pbf -e IMPORT_STYLE=address -e NOMINATIM_FLATNODE_FILE=/nominatim/flat_data/flatnode.file -p 8080:8080 -p 5432:5432 -v c:/nominatim/flat_data:/nominatim/flat_data -v c:/nominatim/osm_data:/nominatim/osm_data --name planet mediagis/nominatim:4.2
最终导入:花费时间53小时,docker磁盘占用746GB,flatnode.file文件占用81GB,planet-latest.osm.pbf文件占用69GB
根据我docker stats时不时肉眼观察内存占用,使用flatnode.file文件,分配docker 40G内存应该够用了,在服务搭建成功后,根据实际可以进一步降低分配内存

如果需要带wiki数据:
-v c:/nominatim/wiki_data:/nominatim/wiki
-e IMPORT_WIKIPEDIA=/nominatim/wiki/wikimedia-importance.sql.gz

 

posted on 2023-05-06 11:00  Tarantino  阅读(923)  评论(0编辑  收藏  举报

导航