Closed. This question needs details or clarity 。它目前不接受答案。












想改善这个问题吗?添加细节并通过 editing this post 澄清问题。

去年关闭。



Improve this question




是否可以将 Multipolygon 转换为使用 Shapely 填充所有孔或缺失内部区域的 Polygon ?我已经尝试了一段时间,但在文档中找不到它。下图显示了一个多面体示例,其中包含要填充的孔和要删除的正方形。

python - 在 Python 中将多多边形转换为多边形-LMLPHP

最佳答案

一种近似的方法可能是:

  • 提取感兴趣的 MultiPolygon 的各个组件的外边界
  • 扩展-收缩每个外部边界,以填充这些边界大致包含的“洞”,例如,处理“带切口的甜甜圈”
  • 合并上一步获得的所有几何图形

  • 例如:
    #!/usr/bin/env python
    from shapely.geometry import MultiPolygon, Polygon
    from shapely.ops import cascaded_union
    
    a = 0.25
    delta = 0.49
    
    P = MultiPolygon([
        (
            ((0,0),(0,3),(3,3),(3,2-delta),(2,2-delta),(2,2),(1,2),(1,1),(2,1),(2,1+delta),(3,1+delta),(3,0),(0,0)),
            [((a, a), (1-a,a), (1-a,1-a), (a,1-a), (a,a))]
        )
    ])
    
    
    eps = 0.01
    
    omega = cascaded_union([
        Polygon(component.exterior).buffer(eps).buffer(-eps) for component in P
    ])
    for x,y in zip(*omega.exterior.coords.xy):
        print(x, y)
    
    MultiPolygon P 看起来像:
    python - 在 Python 中将多多边形转换为多边形-LMLPHP

    而上面列出的脚本按预期生成了一个边长为 3 的近似正方形,即,它填充了左下角的洞以及 MultiPolygon 中心的“空白空间”,它被渲染为一个洞在具有足够高的参数 eps 值的扩展-收缩过程中。

    10-08 15:04