【发布时间】:2015-01-19 16:10:44
【问题描述】:
我有一个案例,它基于在一条线上投影一个点,然后将这条线分开。我的用例稍微复杂一些,但我的问题可以用以下代码重现:
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))
通过构造,“pr”应该在 line1 和它们的交点上:
line1.contains(pr)
line1.intersects(LineString([pt, pr]))
打印两次“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]))
打印“假”。
我了解这背后的浮动精度问题,但这是否意味着我可以永远测试在线上的点?当我根据点列表构造一条线时,我是否可以确定至少所有“构造”点都在线上?
【问题讨论】:
-
您是否可以选择更精细的单位,比如说毫米而不是米?
-
@PauloScardine:谢谢。是的,如果我获得稳定性,我可以很容易地放弃精度。将我的值乘以 10 就可以了。但它适用于所有情况吗? Shapely 继续在内部使用花车。