簡體   English   中英

帶線的多邊形交點| Python Shapely

[英]Polygon Intersection with Line | Python Shapely

我一直在嘗試使用形狀來查找直線和多邊形的交點,但是我遇到了一些浮點數的問題。

示例代碼:

polygon = [(4.0, -2.0), (5.0, -2.0), (4.0, -3.0), (3.0, -3.0), (4.0, -2.0)]
shapely_poly = shapely.geometry.Polygon(polygon)

line = [(4.0, -2.0000000000000004), (2.0, -1.1102230246251565e-15)]
shapely_line = shapely.geometry.LineString(line)

intersection_line = list(shapely_poly.intersection(shapely_line).coords)
print intersection_line

我期望的是兩個頂點的列表。

點1:在多邊形內部的點,在這種情況下為(4.0,-2.0000000000000004)。

點2:是[(4.0,-2.0000000000000004),(2.0,-1.1102230246251565e-15)]和[(3.0,-3.0),(4.0,-2.0)]的交點。

但是,我收到的結果是:

[(4.0, -2.0000000000000004)]

我還檢查了我要看的邊緣是否有交叉點:

>>> edge = shapely.geometry.LineString([(3.0, -3.0), (4.0, -2.0)])
>>> edge.intersects(shapely_line)
False

如果將(4.0,-2.0000000000000004)替換為(4.0,-2.000000000000000),則邊緣相交將評估為True。

有人對發生的事情或我缺少的事情有任何想法嗎? 謝謝!

在此處輸入圖片說明

編輯:

我已經測試了使用1.12版本和3.3.1、3.3.5、3.3.6、3.3.7的geos的能力。

如果有人對我如何在Windows上更新geos版本感到好奇:

從GEOS網站下載了geos- [version] .tar.bz2。 使用Visual Studio 10 Win64生成器提取文件並在其上運行CMake。 打開.sln文件並進行構建,然后將生成的geos_c.dll移動並粘貼到Python目錄中的geos_c.dll的安裝位置。

Shapely構建在C ++ GEOS庫周圍的C包裝器之上。 這個C ++庫內部深處的地方是Precision類,它處理舍入錯誤。 我想我們可以得出結論,您的Shapely版本和geos庫對這種情況的處理方式有所不同。 不幸的是,訪問精度模型的代碼在C api中不可用,因此在Shapely中也不可用。 看到http://lists.gispython.org/pipermail/community/2011-February/002898.html

不過,更改為更高版本的geos可能會解決您的問題。 它在我的計算機上正常工作,具有1.2.16和libgeos 3.3.5-CAPI-1.7.5。

暫無
暫無

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

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