从根本上讲,需要一个精确的模型,并且有各种计划在某个时候将其实现到GEOS中(不要屏住呼吸,因为已经讨论了好几年了)。
否则,这些选项可以是基于距离的测试(推荐),也可以是稍作调整的更昂贵的基于缓冲区的技术(请参阅机器epsilon):
from shapely.geometry import LineString, Pointline1 = LineString([(1, 1.2), (2, 2), (3, 2.3), (4, 1.2)])pt = Point(2.5, 1.2)pr = line1.interpolate(line1.project(pt))# Distance basedprint(line1.distance(pr) == 0.0) # True# Buffer basedEPS = 1.2e-16print(line1.buffer(EPS).contains(pr)) # Trueprint(line1.buffer(EPS).intersects(LineString([pt, pr]))) # True
您还可以使用
or运算符链接便宜和昂贵的测试,例如:
print(line1.contains(pr) or line1.buffer(EPS).contains(pr))
如果第一个返回,则仅运行第二个和更昂贵的测试
False。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)