json - 为什么planet_osm_ways表中tags列的数据类型不是JSON格式?

标签 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 格式保存标签数据。非常感谢您的宝贵时间。

最佳答案

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

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

  1. 好的和可靠的开源软件(如 PostgreSQL 和 osm2psql)需要时间,进化缓慢。

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


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

关于json - 为什么planet_osm_ways表中tags列的数据类型不是JSON格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34255883/

相关文章:

sql - 按各种属性比较两个大表 - PostgreSQL

postgresql - 列 xxx 缺少数据

c# - 使用 ServiceStack 反序列化嵌套 JSON 对象

java - 如何将标准 Java 类型映射到 SQL 类型?

javascript - 从 Django 模型创建 javascript 对象(类)

java - 如何在JPA中保留父级和子级?

asp.net - 多边形的国家行政级别

networkx - 使用 OSMnx 提取约束多边形

javascript - 如何使用 Jquery 从复选框收集值的 JSON 对象?

php - 在 Laravel json 响应中使用访问器和修改器