我一直在处理 OSM 数据,我使用 osm2pgsql 将其导入到我的 postgresql 数据库中.这在我的 postgre 数据库中生成了几个表,其中包含一个表 planet_osm_ways。可以研究osm行星here . planet_osm_ways 具有以下数据样本:
问题: 上表中的 tags 列不是 JSON 格式。以 JSON 格式保存此数据是否有用?
我相信它在访问标签时会非常有用,例如如果数据是JSON格式,“name”键的内容可以很容易地访问。在当前状态下,除了解析每个标签列实例中的所有标签外,没有其他解决方案。
期待有趣的建议,并了解是否有任何特殊原因不以 JSON 格式保存标签数据。非常感谢您的宝贵时间。
最佳答案
osm2psql
使用了一种“接近 JSON”的旧格式...您可以使用一些“很少使用的标签”(如 this wiki considerations),osm2pgsql
转换为 hstore
, and you can convert to JSON using hstore_to_json
in PostgreSQL 9.5 .
对于其他更相关的数据,您引用了“标签列”...如 Osm2pgsql/schema 所定义,
- planet_osm_nodes.tags
- planet_osm_rels.tags
- planet_osm_ways.tags
它们是 text[]
数据类型(字符串数组),表示“标签和值”,格式为:{tag1, value1, tag2, value2, ...}... 所以,json_object()
的格式转换为 JSON(或 jsonb_object
为 JSONB)。
注意事项
为什么它不使用 PostGreSQL JSON(B) 列类型?我不是 osm2pgsql 的作者,但很容易理解作者的决定。
osm2pgsql
软件是 2006 年的一个项目,time of the PostregSQL 7 ... 搜索 time-line of the osm2pgsql
development .
不稳定的 JSON 支持到达 PostgreSQL v9.2(2012-09),并在 2016 年作为真正的专业支持完成(!)PostgreSQL v9.5 和 JSONB内部格式。
因此,我们看到了基本原因:
好的和可靠的开源软件(如 PostgreSQL 和 osm2psql)需要时间,进化缓慢。
Professional JSON 对于 PostgreSQL 社区来说是“新的”。
我也对 OSM JSON 建模很感兴趣,但它不是那么简单,是一种新的数据模型...所以,让我们看看是什么 the developpers answer here .
关于json - 为什么planet_osm_ways表中tags列的数据类型不是JSON格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34255883/