osm2pgsql 数据转换:丢失列

osm2pgsql data converting: lost columns

我已经使用 osm2pgsql 将 osm 数据从 *.bz2 格式转换为 PostgreSQL 数据库。但是在转换之后,我在 table planet_osm_roads 中看不到这样的列:车道,最大速度。 有人解释一下这些列在哪里吗?谢谢。

使用osm2pgsql时添加选项-k

osm2pgsql -d geodatabase -k planet.osm.bz2

-k|--hstore Add tags without column to an additional hstore (key/value) column to postgresql tables

解释:osm2pgsql 正常导入静态数据库模式中的数据。没有对应列的标签将被忽略。通过添加选项 -k--hstore,osm2pgsql 将向每个 table 添加一个新的 hstore 列 tags 并在那里保存所有没有列的标签。

根据您的需要,您可以使用 -j 代替,这使得 osm2pgsql 将所有标签保存在 tags 列中,这意味着,标签也包含数据库列。

-j|--hstore-all Add all tags to an additional hstore (key/value) column in postgresql tables

导入后,要从数据库中提取所有 maxspeed 标签,您可以使用如下查询(示例):

SELECT osm_id, name, tags -> 'maxspeed' FROM planet_osm_roads;

其中 tags 是 hstore 列,-> 是 hstore 运算符。

有关 hstore 类型及其运算符的更多信息,请参阅 Postgresql 文档:http://www.postgresql.org/docs/9.3/static/hstore.html

这最好是评论,但是,我没有足够的声誉来这样做:我强烈建议不要使用 .bz2,而是使用 .pbf,"Protocolbuffer Binary Format",因为:"It is about half of the size of a gzipped planet and about 30% smaller than a bzipped planet. It is also about 5x faster to write than a gzipped planet and 6x faster to read than a gzipped planet. The format was designed to support future extensibility and flexibility." 更多信息:http://wiki.openstreetmap.org/wiki/PBF_Format