为什么planet_osm_ways表中的标签数据类型列不是JSON格式?

时间:2015-12-13 20:20:37

标签: json postgresql openstreetmap

我一直在研究OSM数据,我使用osm2pgsql导入到postgresql数据库。这在我的postgre数据库中生成了几个表,其中包含表 planet_osm_ways 。可以研究行星osm here。 planet_osm_ways包含以下数据样本: enter image description here

问题: 上表中的tags列不是JSON格式。以JSON格式提供这些数据会不会有用吗?

我相信它在访问标签时非常有用,例如,如果数据是JSON格式,那么" name"密钥可以很容易地访问。在当前状态下,除了解析每个标记列实例中的所有标记之外,没有其他解决方案。

期待有趣的建议,并了解是否有任何特殊原因不能保留JSON格式的标签数据。非常感谢你的时间。

1 个答案:

答案 0 :(得分:1)

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内部格式。

因此,我们看到了基本原因:

  1. 优秀可靠的开源软件(如PostgreSQL和osm2​​psql)需要时间,进展缓慢。

  2. 专业JSON对于PostgreSQL社区来说是“新的”。

  3. 我也对OSM JSON建模感兴趣,但它不是那么简单,是一个新的数据模型......所以,让我们来看看the developpers answer here