使用渗透将POSTGIS表转换为.OSM

时间:2013-03-08 14:41:51

标签: xml openstreetmap postgis osmosis

我正在使用osmosis 0.42和PostGIS 2.0.1,我正在尝试将一些postGIS表导出到.OSM xml文件。

我正在使用--read-pgsql命令从postgis读取(而不是--read-apidb,因为它在连接到数据库时抛出错误)..

不幸的是跑步:

osmosis --read-pgsql host="x" database="x" user="x" password="x" --write-xml file="myfile.osm"

产生以下错误:

Task 2-write-xml does not support data provided by default pipe stored at level 1 in the default pipe stack

有什么想法吗?

非常感谢!

菲德

4 个答案:

答案 0 :(得分:1)

问题在于--read-pgsql生成数据集,但--write-xml需要实体流

在这两个步骤之间使用--dataset-dump将数据集转换为实体流:

osmosis --read-pgsql host="x" database="x" user="x" password="x" --dataset-dump --write-xml file="myfile.osm"

答案 1 :(得分:0)

问题是您的数据库不是Osmosis理解的格式。 Osmosis只支持几种模式,因此您需要编写自定义导出器。

答案 2 :(得分:0)

尽管postgis中的数据具有“快照”架构,但我还没有找到解决方案。

我在http://marcusjenkins.com/maps/plumbing-with-openstreetmap-osmosis/

找到了解决方案

解决方案是: osmosis --read-pgsql host =“localhost”database =“foo”user =“foo”password =“foo”outPipe.0 = pg --dd inPipe.0 = pg outPipe.0 = dd --write-pbf inPipe .0 = dd file = wherever_munged.osm.pbf

答案 3 :(得分:0)

获得有限的区域:

osmosis --read-pgsql database=egypt-osm user=gisuser password='test0199' outPipe.0=pg --dataset-bounding-box inPipe.0=pg top=30.1332509 left=31.1400604 bottom=29.9400604 right=31.3220215 outPipe.0=dd --write-xml inPipe.0=dd file=- | bzip2 > cairo.osm.bz2

获得一切:

osmosis --read-pgsql database=egypt-osm user=gisuser password='test0199' outPipe.0=pg --dd inPipe.0=pg outPipe.0=dd --write-xml inPipe.0=dd file=- | bzip2 > everything.osm.bz2

如果您遇到类似" java.util.HashMap无法转换为org.openstreetmap.osmosis.hstore.PGHStore"

等错误,请记住使用最新的渗透。