我一直在尝试使用 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。
有没有人对正在发生的事情或我错过了什么有任何想法?谢谢!
编辑:
我已经使用 shapely 版本 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 目录中 shapely 安装 geos_c.dll 的位置。