代码之家  ›  专栏  ›  技术社区  ›  Luís Jorge Gonçalves

在Postgis中,如何从空间表和相关(非空间)表之间的一对多关系构建Geojson

  •  2
  • Luís Jorge Gonçalves  · 技术社区  · 7 年前

    我有一个医院(点)的空间表,它与价(非空间)表(急症、急症等)有一对多的关系

    (id、名称、geom); 原子价 (id、名称、价)

    “name”是公共字段。

    如何在此基础上在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 回复  |  直到 7 年前
        1
  •  3
  •   thibautg    7 年前

    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
    

    返回的GeoJSON对象根据 http://geojsonlint.com/