gpt4 book ai didi

PostGIS:合并多面体并保持边界

转载 作者:行者123 更新时间:2023-12-01 03:49:23 25 4
gpt4 key购买 nike

我们正在尝试合并存储在 PostGIS 2.1 数据库中的两个多多边形,而不会丢失每个多多边形中包含的边界。

我们的空间数据符合以下标准。

-- Check whether the polygons share points (boundaries?)
-- ST_Intersects:
-- Returns TRUE if the Geometries/Geography "spatially intersect in 2D" - (share any portion of space)
-- and FALSE if they don't (they are Disjoint).
ST_Intersects(higher_geom,lower_geom) = TRUE

-- ST_Crosses:
-- Returns TRUE if the supplied geometries have some, but not all, interior points in common.
ST_Crosses(higher_geom,lower_geom) = FALSE

-- Since ST_Crosses would return FALSE if the polygons have all interior points in common
-- we have to ensure this is not the case
ST_Within(higher_geom,lower_geom) = FALSE

如果我们然后尝试使用以下查询聚合列lower_geom 和higher_geom(均为MultiPolygon 类型),则ST_Union 的结果缺少原始多边形的边界。
SELECT
ST_Union(lower_geom, higher_geom)
FROM
myTable

为了更清楚,我们添加了一个屏幕截图。在我们想要的结果中,绿色和红色多边形都应该包含在一个仍包含所有边界的新多边形中。

enter image description here

有没有人有想法!?

提前致谢,
线 & 马丁

最佳答案

这适用于我拼凑的几个测试多边形。它使用 ST_Dump 技巧来取消合并由内部查询产生的几何集合,别名为表 c,然后使用 ST_Multi(ST_Collect(geom...) 重新收集几何。内部查询组合了两组的交集具有交集和并集差异的几何。

select ST_multi(ST_Collect(d.geom)) 
from (select (ST_Dump(c.geom)).geom
from (select ST_Collect(ST_Intersection(a.geom, b.geom),
ST_SymDifference(ST_Intersection(a.geom, b.geom),
ST_Union(a.geom, b.geom))) as geom
from lower_geom a, higher_geom b)
as c)
as d;

将有一种更优雅、更有效的方式来编写它,但在尝试之前,我想知道这是否适用于您的数据。

关于PostGIS:合并多面体并保持边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184927/

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