当前位置: 首页 > 知识库问答 >
问题:

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

充子航
2023-03-14

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

医院(id,name,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个答案

吕博耘
2023-03-14

使用此查询,“valences”列表将作为一个json数组返回到属性<code>properties中。valences</code>

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/ 有效

 类似资料:
  • 问题内容: 如何删除表格中行和列之间的多余空间。 我尝试过更改表格以及tr和td的边距,填充和各种边框属性。 我希望所有图片都紧挨着看起来像一张大图片。 我该如何解决? CSS HTML 问题答案: 将此CSS重置添加到您的CSS代码中: 它将有效地重置CSS,摆脱填充和边距。

  • 我使用Laravel7和Corcel连接到WordPress安装的数据库。 连接工作正常,到目前为止从WordPress获取数据没有问题:

  • 我有以下实体: 在一个数据类下面,引用了3个其他实体,包括一个嵌套实体,: 其中< code>DbBreakWithPots如下所示: 在我的DAO中,我实现了查询方法,它运行良好: 但是,目前我正在逐个表手动从数据库中插入和删除,但我具有嵌套关系的事实使其变得棘手。有没有办法简单地插入并通过一个sql请求将其删除?

  • 问题内容: 一对多和多对一关系的真正区别是什么?它只是颠倒的,是什么样的? 除了本主题之外,我找不到关于此主题的任何“易懂”教程:初学者使用的SQL:第3部分- 数据库关系 问题答案: 是的,反之亦然。它取决于实体存在于关系的哪一侧。 例如,如果一个部门可以雇用多名员工,则部门与员工之间是一对多的关系(1个部门雇用许多员工),而员工与部门之间的关系则是多对一的关系(许多员工在一个部门中工作)。 有

  • 问题内容: 如何删除表格中行和列之间的多余空间。 我尝试过更改表格以及tr和td的边距,填充和各种边框属性。 我希望所有图片都紧挨着看起来像一张大图片。 我该如何解决? CSS HTML 问题答案: 将此CSS重置添加到您的CSS代码中: 它将有效地重置CSS,摆脱填充和边距。

  • 问题内容: 我的问题是,例如,当我创建一个表时:以下几列: 哪里是用。 然后以列为例: 凡是与外键是从。 应该是说我已经建立的关系和使用。 这两个表最初都是空的,因此我编写了以下SQL命令: 这很好用,但是当我尝试插入子表()时,它告诉我: 错误外键约束 所以基本上我想要做的是插入到父表,然后到子表,以便显示出来的(子表)的外键,相当于用在(父表)。 我必须先创建两个表,而无需使用外键,然后再尝试