【发布时间】:2020-11-27 13:51:42
【问题描述】:
我有多个多边形,如果它们重叠,我想合并它们
id;geom
1;"POLYGON((2 1,4 1,4 4,2 4,2 1))"
2;"POLYGON((3 3,5 3,5 5,3 5,3 3))"
3;"POLYGON((1 0,3 0,3 2,1 2,1 0))"
这里所有的 1 都与其他两个 (1,2) 和 (1,3) 重叠,所以最终结果应该是一个大多边形,所以我希望现在表格中只有 1 行。
我在查询中间的某个地方,我得到了重叠的多边形,但它被合并了,但是并结合在一起,并且已经合并的一个也没有被删除。
SELECT a.id as a_id, b.id as b_id, ST_Overlaps(a.geom, b.geom), st_astext(ST_Union(a.geom, b.geom)) as new_geom
FROM public.testpostgis a
JOIN public.testpostgis b ON a.geom && b.geom AND ST_Overlaps(a.geom, b.geom)
WHERE a.id <> b.id
这样打印输出
a_id;b_id;overlap;new_geometry
1;2;t;"POLYGON((4 3,4 1,2 1,2 4,3 4,3 5,5 5,5 3,4 3))"
1;3;t;"POLYGON((2 2,2 4,4 4,4 1,3 1,3 0,1 0,1 2,2 2))"
2;1;t;"POLYGON((3 4,3 5,5 5,5 3,4 3,4 1,2 1,2 4,3 4))"
3;1;t;"POLYGON((3 1,3 0,1 0,1 2,2 2,2 4,4 4,4 1,3 1))"
最后,表格应该不包含重叠的多边形,所以这里应该只有 1 行合并几何。
【问题讨论】:
标签: sql postgresql postgis