簡體   English   中英

使用Shapely,多邊形觸及多個點

[英]Polygon touches in more than one point with Shapely

我在Python中有一個Shapely多邊形列表。 要使用.touches()方法找出哪種多邊形觸摸很容易。 但是,只有當多邊形共享多個點(換句話說,共享邊框)時,我才需要返回True 讓我說明一下:

In [1]: from shapely.geometry import Polygon
In [2]: polygons = [Polygon([(0,0),(0,1),(1,1),(1,0)]), Polygon([(1,0),(1,1),(2,1),(2,0)]), Polygon([(2,1),(2,2),(3,2),(3,1)])]

In [3]: polygons[0].touches(polygons[1])
Out[3]: True

In [4]: polygons[0].touches(polygons[2])
Out[4]: False

In [5]: polygons[1].touches(polygons[2])
Out[5]: True

在這種情況下,多邊形0和1共享兩個點(整個邊界)。 多邊形1和2僅共享一個點。 我正在尋找的是一個在上面的例子中給我TrueFalseFalse的功能,或者只是返回觸摸點數的東西,然后我可以自己完成其余的邏輯。

當然,任何不涉及手動迭代所有點的解決方案都是最佳的 - 如果我需要這樣做,它會破壞使用Shapely的目的:-)

如果你真的想檢查兩個多邊形是否共享超過x個點,你可以簡單地這樣做:

p0,p1,p2 = polygons
x = 2
len(set(p1.boundary.coords).intersection(p2.boundary.coords))>=x

但我認為你可能想要的是確定兩條邊是否共線(和重疊)。

安德魯的建議的實現可能正是您正在尋找的:

>>> type(p0.intersection(p1)) is geometry.LineString
True
>>> type(p1.intersection(p2)) is geometry.LineString
False

我沒有使用過勻稱,但你試過看看兩個多邊形的交點是否是一條線?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM