给定一个多边形列表,我试图找到所有不同的,非重叠区域的边界。
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函数提取不同的区域。然而,这种方法产生的边界是连通的(不是每个不同区域的一个边界)和非封闭的。
如何找到这些非重叠区域及其边界的好方法呢?
答案 0 :(得分:0)
对任意多边形的布尔运算比最初出现的问题困难得多,主要是因为退化问题。
如果将多边形渲染到缓冲区,填充边距,然后采取轮廓,您将实现目标。
二进制图像库中提供了执行此操作的所有部分 (您需要drawbinary.c来绘制多边形并进行泛洪填充,并使用binaryutils.c或chaincodes.c来根据您的需要获取轮廓(作为xys列表或作为上下左右命令的链) )