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;