在Postgis中,如何在空间表和相关(非空间)表之间从一个关系到许多关系构造Geojson



i有一张医院的空间表(点),该表与(非空间)价值表(cirurgy,surstrengency等)有一对多关系。

医院(id,name,geom); VAINES (ID,名称,Valence)

"名称"是普通字段。

如何在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;

非常感谢!

在此查询中," valences"列表被返回为属性 properties.valences

中的JSON数组
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对象是有效的

最新更新