gpt4 book ai didi

sql - 在几何列表上应用 ST_Intersection

转载 作者:行者123 更新时间:2023-11-29 12:57:29 24 4
gpt4 key购买 nike

我是 postgis 的新手,所以,如果这是一个愚蠢的问题,我很抱歉。

我在表格中有一个多边形列表,我想找到所有多边形之间的交点。我可以做一个 ST_Union 而不会出现这样的问题:

从 mytable t 中选择 ST_Union(t.geom)

但同样不适用于 ST_Intersection

从 mytable t 中选择 ST_Intersection(t.geom)`
错误:函数 st_intersection(geometry) 不存在

查看 ST_Union 的文档与 ST_Intersection ,它们确实具有不同的签名,这表明取消链接 ST_Union,ST_Intersection 只能应用于恰好 2 个几何图形。

有解决办法吗?

提前致谢

最佳答案

您可以使用 WITH RECURSIVE common table expression使用运行结果处理 geometry[] 的每个元素。

下面是一些示例数据,基于重叠缓冲的随机位置(图中的蓝色多边形):

DROP TABLE IF EXISTS ar;
SELECT array_agg(ST_Buffer(ST_MakePoint(random(), random()), 0.5, 3)) AS geoms
INTO TEMP ar
FROM generate_series(1, 6) AS id;
SELECT ST_Collect(geoms) FROM ar;

神奇的是:

WITH RECURSIVE inter AS (
-- First geometry
SELECT 1 AS idx, geoms[1] AS geom FROM ar a
UNION ALL
-- Remaining geometries with the previous result
SELECT a.idx + 1, ST_Intersection(a.geom, b.geoms[a.idx + 1])
FROM inter a, ar b
WHERE a.idx + 1 <= array_length(geoms, 1) AND NOT ST_IsEmpty(a.geom)
)
SELECT * FROM inter
ORDER BY idx DESC LIMIT 1;

“递归”在最后一个数组索引或结果为空时停止。此外,您可以通过注释掉最后一行来查看每个交集步骤。

img

关于sql - 在几何列表上应用 ST_Intersection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39497270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com