我一直在努力使用shapely來找到一個線和一個多邊形的交集,但我遇到了一些浮點數的問題。多邊形相交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- [版] .tar.bz2格式。使用Visual Studio 10 Win64生成器提取文件並在其上運行CMake。打開.sln文件並構建它,然後移動生成的geos_c.dll並將其粘貼到已安裝geos_c.dll的地方,方法是在Python目錄中進行修改。
圖片會做這個問題的世界的好 – flup
感謝unutbu的圖片,它看起來比我要畫的那個更好! – Lisa
當我做'路口= shapely_poly.intersection(shapely_line)'然後'打印intersection'我得到'LINESTRING(4.0000000000000000 -2.0000000000000004,4.0000000000000000 -2.0000000000000000)' – flup