在 Postgis 中,如何从空间表和相关(非空间)表之间的一对多关系构建 Geojson
Posted
技术标签:
【中文标题】在 Postgis 中,如何从空间表和相关(非空间)表之间的一对多关系构建 Geojson【英文标题】:In Postgis how to construct Geojson from a one to many relationship between a spatial table and a related (non spatial) table 【发布时间】:2017-08-31 04:53:49 【问题描述】:我有一个医院(点)的空间表,它与一个(非空间)价(紧急、紧急等)表具有一对多关系
医院(身份证、姓名、地理位置); 化合价(id、名称、化合价)
“名称”是通用字段。
如何在 PostgreSQL/Postgis 中构建一个有效的 Geojson,每个医院(点)可以有一个或多个化合价?
我已经尝试过此查询的一些变体,但总是给出相同的错误“子查询返回的不止一行用作表达式”。
SELECT row_to_json(fc) FROM
(
SELECT 'FeatureCollection' As type, array_to_json(array_agg(f)) As features from
(
SELECT 'Feature' As type, ST_AsGeoJSON(lg.geom)::json As geometry, row_to_json
((select l from (select
v.*
FROM valence v
inner join hospital lg on lg."name" = v."name" ) As l
)) As properties
from hospital as lg)
As f
) As fc;
非常感谢!
【问题讨论】:
【参考方案1】:使用此查询,“价”列表作为 json 数组返回属性 properties.valences
SELECT
json_build_object(
'type', 'FeatureCollection',
'features', json_agg(
json_build_object(
'type', 'Feature',
'geometry', ST_AsGeoJSON(h.geom)::json,
'properties', json_build_object(
'name', h.name,
'valences', (
-- Generate json array of "valences":
SELECT array_to_json(array_agg(v.valence))
FROM valence v
WHERE v.name = h.name
GROUP BY v.name
)
)
)
)
) json
FROM
hospital h
根据http://geojsonlint.com/返回的GeoJSON对象有效
【讨论】:
以上是关于在 Postgis 中,如何从空间表和相关(非空间)表之间的一对多关系构建 Geojson的主要内容,如果未能解决你的问题,请参考以下文章
如何继续将关系空间数据库从 PostGIS 上传到 Geoserver?
基于Mybatis-Plus实现Geometry字段在PostGis空间数据库中的使用
常规笛卡尔坐标系的 PostGIS 空间参考 ID(SRID)?