繁体   English   中英

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

[英]Boundary of non-overlapping regions of intersecting polygons

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

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

这是一个类似的问题到这个 但是,当我运行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:在103.00000000000006 328找到LINESTRING(103.333 327.917,103 328)和LINESTRING(104.2 327.2,103 328)之间的非节点交集

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

在此处输入图片说明 在此处输入图片说明

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

在任意多边形上执行布尔运算比最初出现的要困难得多,这在很大程度上是由于退化问题。

如果将多边形渲染到缓冲区,填充边界,然后绘制轮廓,则可以实现目标。

二进制图像库中提供了所有要做的点滴(您需要drawbinary.c来绘制多边形并进行泛洪填充,而binaryutils.c或chaincodes.c则取决于您想要的轮廓(如xys列表或上下左右的命令链)

https://github.com/MalcolmMcLean/binaryimagelibrary

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM