使用Shapely和Django-GIS实现线串最近点查找与插入的问题求助
Shapely和Django-GIS实现线串最近点查找与插入的问题求助
大家好,我现在用Shapely和Django-GIS做开发时碰到了个棘手的问题,想请各位大佬帮忙看看。
我现在的需求是这样的:手里有一个包含完整坐标的线串顶点列表,还有一个坐标保留到6位小数的点。需要完成三件事:
- 找到线串上离这个点最近的原有顶点的索引
- 计算出这个点到线串的最近点(这个点可能是线串的顶点,也可能是某段线段中间的点)
- 把这个最近点插入到刚才找到的顶点索引的下一个位置
我自己写了个静态方法来处理,但遇到了一个奇怪的问题——对某些输入点,计算出来的最近点居然不在原线串里,直接抛出了ValueError。
给大家举两个例子:
- 成功的情况:
输入点坐标:(4.756696, 45.381095)
计算出的最近点:(4.75669614409327, 45.3810948660022)——这个点确实在原线串的范围内 - 失败的情况:
输入点坐标:(4.756614, 45.380532)
计算出的最近点:(4.756613683262075, 45.38053204640647)——这个点完全不在原线串里,直接导致后续操作报错
我写的部分代码如下:
from shapely.geometry import LineString, Point class SomeClass: @staticmethod def closest_point_on_linestring(line_coords: list, point: Point): line = LineString(line_coords) min_dist = float('inf') closest_point = None for idx in range(len(line_coords) - 1): # 这里是我遍历每一段线段计算最近点的逻辑 # ...(代码没写完,核心是逐段找最近点再取全局最小)
我现在的困惑是:为什么有些情况下得到的最近点不在原线串上?而且怎么能确保找到的最近点确实属于原线串的一部分,同时准确找到对应的原有顶点索引,方便后续的插入操作?麻烦各位帮忙指点一下,谢谢了!
备注:内容来源于stack exchange,提问作者May.D
相关产品推荐
相关产品推荐

