导入openstreemap plant数据失败与最终解决

错误的导入方式

这是第二次了,而且和第一次是同样的错误,看着它程序就这样挂掉,一点办法都没有。而且第二次花了近40个小时,虽然第一次花了一个星期挂断更惨。

具体配置是这样的,不知道有没有什么不足或异常的地方:

D:\ToolsBin\osm2pgsql-bin\osm2pgsql.exe --create --database osm_test_db --unlogged -C2000 central-america-latest.osm.pbf -S D:\ToolsBin\osm2pgsql-bin\default.style -P 5433 -U postgres --slim --hstore --hstore-add-index --flat-nodes "A:\flat-nodes.node.test"
osm2pgsql --create --database osm_planet_db --unlogged -C5000 planet-180409.osm.pbf -P 5432 -U postgres --slim --hstore --hstore-add-index --flat-nodes /home/tmp/flat-nodes.node
[root@centos-win10 ~]# osm2pgsql --create --database osm_planet_db --unlogged -C5000 planet-180409.osm.pbf -P 5432 -U postgres --slim --hstore --hstore-add-index --flat-nodes /home/tmp/flat
-nodes.node                                                                                                                                                                                  
osm2pgsql version 0.92.0 (64 bit id space)

Using built-in tag processing pipeline
Using projection SRS 3857 (Spherical Mercator)
Setting up table: planet_osm_point
Setting up table: planet_osm_line
Setting up table: planet_osm_polygon
Setting up table: planet_osm_roads
Allocating memory for dense node cache
Allocating dense node cache in one big chunk
Allocating memory for sparse node cache
Sharing dense sparse
Node-cache: cache=5000MB, maxblocks=80000*65536, allocation method=11
Mid: loading persistent node cache from /home/tmp/flat-nodes.node
Allocated space for persistent node cache file
Maximum node in persistent node cache: 0
Mid: pgsql, scale=100 cache=5000
Setting up table: planet_osm_nodes
Setting up table: planet_osm_ways
Setting up table: planet_osm_rels

Reading in file: planet-180409.osm.pbf
Using PBF parser.
Processing: Node(314870k 301.9k/s) Way(0k 0.00k/s) Relation(0 0.00/s)
Processing: Node(4435699k 328.9k/s) Way(306241k 4.01k/s) Relation(0 0.00/s)
Processing: Node(4435699k 328.9k/s) Way(364832k 4.31k/s) Relation(0 0.00/s)
Processing: Node(4435699k 328.9k/s) Way(484098k 4.87k/s) Relation(102020 5.75/s)

正确的套路

从第一次3.6日开始折腾这个东西,到今日七月份,共计四个月,终于将导入这个步骤搞定,下面的命令应该是没有太多的问题。

osm2pgsql -G --hstore -U postgres --style /pgm/openstreetmap-carto/openstreetmap-carto.style --tag-transform-script /pgm/openstreetmap-carto/openstreetmap-carto.lua -d gis --unlogged -C8000 greater-london-latest.osm.pbf --slim --flat-nodes /root/flat-nodes.node

详解关于osm2pgsql的style参数

style 该参数决定了导入到数据库的表结构和字段,要使用什么字段来自于使用的程序,比如我使用maplink和openstreetmap-carto进行数据读取,则必须使用相应的配置文件。

对应的脚本可以参考:

https://github.com/gravitystorm/openstreetmap-carto/blob/master/INSTALL.md

所以对应的必须使用openstreetmap-carto的导入样式和脚本

内存配置

机器的配置为16G, 一半左右就好,实际上多一点少一点关系并不大。

更重要的Postgres配置

网上应该可以找到许许多多优化的篇章,记得配置最大化就好。建议可以将fsync关闭掉,毕竟断电什么的,最终还是得从头来过。

操作系统的选择

  1. window下要导入,不是不可以,只是真的有那么稳定么?好几次都是因为各种不稳定而挂掉了,当然导入一个城市的数据还是OK的。
  2. Centos下导入,自然是可以的,只是各种环境的安装比较麻烦罢了,对应的可以参考 https://www.keisan.io/knowledgebase/centos-7-open-street-map-tile-server ,看文档需要看关键点,这篇文章能给与很多参考,但绝对不是最终的命令
  3. Unbuntu应该算是最好的选择了,如果你喜欢应该可以找到更多需要的内容,同样应该也更稳定

简单的效果

openstreet map 渲染效果图
这里我只导入了整个亚洲的数据,数据不算大,也不算多,耗时大约30小时

效果很简单,渲染也很耗时。同时目前也并不完美,还有许多未解决的问题。

至于为什么要要弄这个很无聊的东西,爱好罢了,目的并不是为了地图渲染,而是为了地图的数据,了解一下罢了。
如果需要渲染的方案,现在那么多的地图直接用起来应该是更好的方案吧。

当前还没有任何评论

写下你最简单的想法