我有一个案例,它基于在一条线上投射一个点,然后在它上面分开这一行.我的用例稍微复杂一些,但我的问题可以通过以下代码重现:
from shapely import *
line1 = LineString([(1,1.2), (2,2), (3, 2.), (4,1.2)])
pt = Point(2.5, 1.2)
pr = line1.interpolate(line1.project(pt))
Run Code Online (Sandbox Code Playgroud)
通过构造,"pr"应该在第1行和它们的交叉点上:
line1.contains(pr)
line1.intersects(LineString([pt, pr]))
Run Code Online (Sandbox Code Playgroud)
打印两次"True".但是改变输入坐标会略微制动工作流程:
from shapely import *
line1 = LineString([(1,1.2), (2,2), (3, 2.3), (4,1.2)])
pt = Point(2.5, 1.2)
pr = line1.interpolate(line1.project(pt))
line1.contains(pr)
line1.intersects(LineString([pt, pr]))
Run Code Online (Sandbox Code Playgroud)
打印"假".
我理解这背后的浮动精度问题,但这是否意味着我永远无法测试线上的点?当我根据点列表构建一条线时,我能确定至少所有"构造"点都在线上吗?