交叉多边形的非重叠区域的边界

时间:2017-02-17 17:05:31

标签: python geometry

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

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)at 103.00000000000006 328

我尝试了另一种方法,我创建了一个覆盖在彼此之上的所有多边形的蒙版。然后我尝试通过Canny检测器和opencv中的findContour函数提取不同的区域。然而,这种方法产生的边界是连通的(不是每个不同区域的一个边界)和非封闭的。

enter image description here enter image description here

如何找到这些非重叠区域及其边界的好方法呢?

1 个答案:

答案 0 :(得分:0)

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

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

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

https://github.com/MalcolmMcLean/binaryimagelibrary