簡體   English   中英

多邊形不會在 Shapely 中關閉

[英]Polygon does not close in Shapely

使用 Shapely 創建多邊形時,我在多邊形函數中推送了 4 個頂點。 輸出應該是一個有 5 個元素的元組(第一個頂點被加倍,也被描述為最后一個)。

然而,我傳遞給函數的輸入頂點的順序似乎影響了結果:有時多邊形用 5 個頂點(應該是)描述,有時用 4 個頂點描述 - 意思是,它不是一個封閉的多邊形(或者換句話說 - 它根本不是多邊形)它一定是一些錯誤。

在下面的例子中,poly1 和 poly 2 之間的唯一區別是我通過的頂點的順序。 不過方向是完全一樣的:

from shapely.geometry import Polygon

print ('poly1 = ', Polygon([(620, 420, 500), (620, 420, 0), (620, 40, 0),(620, 40, 500)]))
print ('poly2 = ',Polygon([(620, 40, 500), (620, 420, 500), (620, 420, 0), (620, 40, 0)]))

然而,結果是不同的——一個是封閉的多邊形,另一個是開放的。 順便說一句,兩者的類型仍然是一個勻稱的多邊形。

poly1 =  POLYGON Z ((620 420 500, 620 420 0, 620 40 0, 620 40 500, 620 420 500))
poly2 =  POLYGON Z ((620 40 500, 620 420 500, 620 420 0, 620 40 0))

有什么解決辦法嗎?

我認為這與第三個坐標有關。 在文檔( 勻稱的文檔)中,它告訴:

構造實例時可以使用第三個 z 坐標值,但對幾何分析沒有影響。 所有操作都在 xy 平面上進行。

這意味着 shapely 不處理 z 坐標。 在您的示例中,如果您刪除 z 坐標,您將得到:

[(620, 420), (620, 420), (620, 40), (620, 40)]
[(620, 40), (620, 420), (620, 420), (620, 40)]

當您傳遞一個線性字符串來構建多邊形時,勻稱的 Polygon 構造函數會檢查最后一個點是否等於第一個點。 如果不是,則添加該點以獲得線性環。 在第二種情況下,據shapely所見,最后一個坐標已經重復了,不需要再添加任何其他點。

暫無
暫無

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

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