【问题标题】:How to merge multipolygon into one smoothly如何平滑地将多个多边形合并为一个
【发布时间】:2022-12-18 12:16:10
【问题描述】:

我有包含两个多边形的多边形。我如何将它们与一个简单的脚本合并,以便它们制作多边形而不是多边形?我需要连接它们,即使它会覆盖不需要的区域。还需要这个来处理多多边形中的 n 个多边形。

为了更好地理解,我需要一个多边形而不是多边形,因为多边形是

[[x,y],[x,y],[x,y], [x,y],[x,y],[x,y], [x,y],[x,y],[x,y]]

但是我需要

[[x,y],[x,y],[x,y]]

Check this image for reference

我曾尝试使用 python 匀称地执行此操作,但没有成功。

【问题讨论】:

标签: python postgresql postgis geojson shapely


【解决方案1】:

ST_ConcaveHull 就是您要找的。此函数计算给定几何(其顶点)的凹几何并返回单个几何。

考虑以下多边形

MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), ((20 35, 45 20, 30 5, 10 10, 10 30, 20 35), (30 20, 20 25, 20 15, 30 20)))

函数ST_ConcaveHull需要第二个参数,它设置计算的外壳的凹度:

param_pctconvex控制计算出的外壳的凹度。值为 1 会产生凸包。值为 0 会产生最大凹度的外壳(但仍然是单个多边形)。介于 1 和 0 之间的值会产生凹度增加的外壳。选择合适的值取决于输入数据的性质,但 0.3 到 0.1 之间的值通常会产生合理的结果。

检查 param_pctconvex 的哪个值最适合您的用例。将其设置为 0.1 会得到以下多边形:

WITH j (geom) AS  (
  VALUES ('SRID=4326;MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), 
                     ((20 35, 45 20, 30 5, 10 10, 10 30, 20 35), 
                     (30 20, 20 25, 20 15, 30 20)))'::geometry)
)
SELECT ST_ConcaveHull(geom,0.1) FROM j

或者,您可以设置第三个(布尔值)参数以允许输出中出现漏洞:

除非可选的param_allow_holes参数被指定为真,否则多边形将不包含孔洞

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 2017-07-22
    • 2012-11-24
    • 2021-06-18
    • 2015-11-15
    • 2016-02-03
    • 1970-01-01
    • 2021-09-01
    • 2021-07-03
    相关资源
    最近更新 更多