【问题标题】:Boundary of non-overlapping regions of intersecting polygons相交多边形的非重叠区域的边界
【发布时间】:2017-07-07 07:31:31
【问题描述】:

给定一个多边形列表,我试图找到所有不同的、非重叠区域的边界。

polygon_lst = []
for xyloc in xylocs:
    polygon_lst.append(Polygon(xyloc))

this 的问题类似。但是,当我运行 unary_union 操作时出现错误:

from shapely.geometry import LineString
layer = polygon_lst
rings = [LineString(list(pol.exterior.coords)) for pol in layer]
from shapely.ops import unary_union, polygonize

错误:shapely.geos:TopologyException:找到非节点交叉点 LINESTRING (103.333 327.917, 103 328) 和 LINESTRING (104.2 327.2, 103 328) 在 103.00000000000006 328

我尝试了另一种方法,我创建了一个所有多边形叠加的蒙版。然后我尝试通过 Canny 检测器和 opencv 中的 findContour 函数提取不同的区域。但是,这种方法产生的边界是连接的(不是每个不同区域有一个边界)并且是非封闭的。

找到这些非重叠区域及其边界的好方法是什么?

【问题讨论】:

    标签: python geometry


    【解决方案1】:

    对任意多边形的布尔运算比最初出现的问题要困难得多,主要是因为退化问题。

    如果您将多边形渲染到缓冲区,填充边缘,然后获取轮廓,您将实现您的目标。

    二进制图像库中提供了执行此操作的所有点点滴滴 (您需要 drawbinary.c 来绘制多边形并进行洪水填充,并需要 binaryutils.c 或 chaincodes.c 来根据您想要的方式获取轮廓(作为 xys 列表或作为上下、左右命令链) )

    https://github.com/MalcolmMcLean/binaryimagelibrary

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2015-05-31
      • 2017-04-19
      • 1970-01-01
      相关资源
      最近更新 更多