Shapely中如何选择LineString与圆交点中沿线路最远的点
解决方案
你之前两种方案失效的核心原因:
- 直接取geoms末尾元素:依赖Shapely默认按x坐标排序的规则,和线走向无关,必然出错
- split切分方案:受浮点精度影响大,交点如果存在微小的坐标偏差就无法正确切分,复杂折线场景下切分结果顺序也不稳定
最简单稳定的实现方式是直接调用Shapely内置的LineString.project()方法,该方法会直接返回点沿LineString走向到起点的线性距离,完全匹配你的需求,性能也远高于split方案。
修改后的find_farthest_intersection函数如下:
def find_farthest_intersection(geometry, intersections): # 用project方法计算每个交点沿线路到起点的距离 intersection_dists = [ geometry.project(point) for point in intersections.geoms ] # 返回距离最大的交点 return max( zip(intersection_dists, intersections.geoms), key=lambda x: x[0] )[1]
替换原有函数后即可解决死循环问题,适配任意走向的LineString场景。
内容的提问来源于stack exchange,提问作者janchytry
相关产品推荐
相关产品推荐

