Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于线串的id从线串创建多边形/多重线串_Sql_Postgresql_Geometry_Postgis - Fatal编程技术网

Sql 基于线串的id从线串创建多边形/多重线串

Sql 基于线串的id从线串创建多边形/多重线串,sql,postgresql,geometry,postgis,Sql,Postgresql,Geometry,Postgis,我有两张这样的桌子: lines: line_id| geometry ------------------- 1 | .... 2 | .... 3 | .... 4 | .... 5 | .... 6 | .... UPDATE polygons_new SET geom = (SELECT ST_Collect(SELECT geometry FROM lines as a, polyg

我有两张这样的桌子:

lines:
line_id|    geometry
-------------------
1      |    ....
2      |    ....
3      |    ....
4      |    ....
5      |    ....
6      |    ....
UPDATE polygons_new
SET geom = (SELECT ST_Collect(SELECT geometry FROM lines as a, polygons as b WHERE a.line_id = b.line_id))
(几何图形列在“线”表中填充)

正如您在多边形表中看到的,我有组成多边形的线的线id-s。 我要做的是,我创建一个新表,每个poly_id只有一条记录:

在此之后,我想填写geom栏,但到目前为止我无法完成这项工作。 我试过的是这样的:

lines:
line_id|    geometry
-------------------
1      |    ....
2      |    ....
3      |    ....
4      |    ....
5      |    ....
6      |    ....
UPDATE polygons_new
SET geom = (SELECT ST_Collect(SELECT geometry FROM lines as a, polygons as b WHERE a.line_id = b.line_id))
问题是它在子查询中返回多行。 有没有办法完成此任务?

您是否尝试过使用,然后使用创建多边形?以下示例将让您了解我所说的内容:

WITH j (id,geom) AS (
  VALUES (1,'SRID=4326;LINESTRING(30 10, 10 30)'),
         (1,'SRID=4326;LINESTRING(10 30, 40 40)'),
         (1,'SRID=4326;LINESTRING(40 40, 30 10)'),
         (2,'SRID=4326;LINESTRING(50 60, 60 20)'),
         (2,'SRID=4326;LINESTRING(60 20, 45 45)'),
         (2,'SRID=4326;LINESTRING(45 45, 50 60)')
) 
 SELECT 
  ST_MakePolygon(
    ST_LineMerge(
      ST_Collect(geom))) 
FROM j
GROUP BY id

编辑:如果只有
多行行
就足够了,只需使用
ST\u Collect
(参见注释):


没有,我以前没试过。事实上,ST_Collect对我来说已经足够了,你给了我一个好主意,让我一部分一部分地和团队合作。我还没想到这么简单的事情。最后,对我有效的是:
选择poly_id,ST_Collect FROM lines AS polygons AS b其中a.line_id=b.line_id按b.poly_id分组
谢谢!起初我以为我需要一个
多边形
,但结果是
多重约束
对我来说就足够了。
WITH j (id,geom) AS (
  VALUES (1,'SRID=4326;LINESTRING(30 10, 10 30)'),
         (1,'SRID=4326;LINESTRING(10 30, 40 40)'),
         (1,'SRID=4326;LINESTRING(40 40, 30 10)'),
         (2,'SRID=4326;LINESTRING(50 60, 60 20)'),
         (2,'SRID=4326;LINESTRING(60 20, 45 45)'),
         (2,'SRID=4326;LINESTRING(45 45, 50 60)')
) 
SELECT ST_Collect(geom)
FROM j
GROUP BY id;