我一直在研究OSM数据,我使用osm2pgsql导入到postgresql数据库。这在我的postgre数据库中生成了几个表,其中包含表 planet_osm_ways 。可以研究行星osm here。 planet_osm_ways包含以下数据样本:
问题: 上表中的tags列不是JSON格式。以JSON格式提供这些数据会不会有用吗?
我相信它在访问标签时非常有用,例如,如果数据是JSON格式,那么" name"密钥可以很容易地访问。在当前状态下,除了解析每个标记列实例中的所有标记之外,没有其他解决方案。
期待有趣的建议,并了解是否有任何特殊原因不能保留JSON格式的标签数据。非常感谢你的时间。
答案 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定义,
它们是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)需要时间,进展缓慢。
专业JSON对于PostgreSQL社区来说是“新的”。
我也对OSM JSON建模感兴趣,但它不是那么简单,是一个新的数据模型......所以,让我们来看看the developpers answer here。