簡體   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