Python Shapely - 检查线是否包含点

Python Shapely - Checking if line contains a point

我在使用 Shapely 库检查 LineString 是否包含因与 Polygon 相交而产生的 Point 时遇到问题。

示例代码:

l = LineString([(5.653154885795476, 6.418676641285647), (6.132921674075812, 5.995573963137367)])
o = LineString([(5, 7.5), (6, 6)])
p = l.intersection(o)
# --> p = Point(5.817513045918756, 6.273730431121867)

但是当 运行 l.intersects(p)l.contains(p)l.touches(p) 时,我总是得到 False,这没有多大意义,因为 p 是相交的结果。

我阅读了有关浮点不精确的信息,在进行上述检查之前添加了以下代码段:

ll = list(line.coords)
for i, v in enumerate(ll):
  ll[i] = Point(np.round(np.array(v), 4))
l = LineString(ll)
p = Point(np.round(np.array(p), 4))

但无济于事。

我需要这个来检查 LineString 的哪一部分与该点相交;这是错的吗?有更好的方法吗?

你说的对,是浮点精度问题。您可以使用此解决方法:

from shapely.geometry import LineString

l = LineString([(5.653154885795476, 6.418676641285647), (6.132921674075812, 5.995573963137367)])
o = LineString([(5, 7.5), (6, 6)])
p = l.intersection(o)

print(l.distance(p)<1e-8)
print(o.distance(p)<1e-8)

输出:

True
True