2

我正在创建一个 postgis 数据库并希望使用过滤后的 OpenStreetMap 数据。

为此,我尝试了以下过程:

  1. 从https://planet.osm.org/下载了 planet.osm.bz2 文件
  2. 使用 bzip2 解压到 *.osm
  3. 通过命令提示符使用 osmfilter 过滤文件
  4. 在命令提示符下使用 osm2pgsql 将过滤后的 *.osm 文件上传到我的数据库

对于我的第一次尝试,我只过滤了陆地区域。

但是,在使用 osm2pgsql 的第 4 步中,我在命令提示符中收到以下错误:“Osm2pgsql 由于错误而失败:第 3137102 行第 61 列的 XML 解析错误:格式不正确(无效令牌)”

如我的 Windows 计算机上的命令提示符所示:

Z:\OpenStreetMap>osm2pgsql -U postgres -W -m -d osm -p filteredland -S "C:\Progr
am Files (x86)\HOTOSM\share\default.style" filteredland2.osm
osm2pgsql version 0.92.0 (64 bit id space)

Password:
Using built-in tag processing pipeline
Using projection SRS 3857 (Spherical Mercator)
Setting up table: filteredland_point
Setting up table: filteredland_line
Setting up table: filteredland_polygon
Setting up table: filteredland_roads
Allocating memory for sparse node cache
Node-cache: cache=800MB, maxblocks=12800*65536, allocation method=1
Mid: Ram, scale=100

Reading in file: filteredland2.osm
Using XML parser.
Processing: Node(1230k 61.5k/s) Way(0k 0.00k/s) Relation(0 0.00/s)node cache: st
ored: 1233078(100.00%), storage efficiency: 50.00% (dense blocks: 0, sparse node
s: 1233078), hit rate: -nan(ind)%
Osm2pgsql failed due to ERROR: XML parsing error at line 3137102, column 61: not
 well-formed (invalid token)

我还尝试了两条替代路线,但也失败了:

  1. 下载 planet.pbf -> 使用 osmconvert 转换为 .o5m -> 使用 osmfilter 过滤

  2. 下载 planet.pbf -> 使用 osmconvert 转换为 .osm -> 使用 osmfilter 过滤(发出警告) -> 使用 osm2pgsql 传输到数据库

任何人都知道如何避免这个错误或有过滤planet.osm文件并上传到postgis的经验吗?

4

1 回答 1

0

我建议使用Osmium而不是 osmfilter,它不需要先将行星转换为不同的格式,并且本机能够返回 PBF 数据,可以直接由 osm2pgsql 处理。它也更快。

于 2017-07-25T14:28:34.787 回答