OSMNX的nearest_edges函数计算最近边时参考边的哪个部分?
OSMNX
nearest_edges 函数距离计算规则说明 核心结论
nearest_edges 计算输入点到边的参考位置为整条边线段上的任意最近点,而非边的中点、或边的两个端点。
具体计算逻辑
- 函数首先通过空间R树索引,快速筛选出和输入点空间范围匹配的候选边集合,减少后续计算量
- 对每一条候选边(对应路网中表示路段的LineString几何对象),计算输入点到该LineString上所有可落点的最短距离:
- 若路网使用未投影的WGS84坐标系(OSMNX默认配置),距离为球面大圆距离
- 若路网已投影为平面坐标系,距离为平面欧氏距离
- 最终返回最短距离对应的边对象
长边场景适配说明
针对长路段场景,默认逻辑完全可以避免中点计算带来的偏差:比如输入点落在长路段中段的侧面,函数会直接计算输入点到该路段侧面最近位置的距离,不会用距离输入点可能很远的路段中点、或端点做参考,返回结果符合真实空间关系。
如果业务场景确实需要基于边的中点做最近边匹配,可以先预计算所有边的中点坐标,再调用最近点查询接口匹配即可。
基础调用示例
import osmnx as ox # 加载指定区域的车行路网 G = ox.graph_from_place("北京市, 中国", network_type="drive") # 转换为投影坐标系提升距离计算精度 G_proj = ox.project_graph(G) # 待查询点的坐标 x_list = [116.403874] y_list = [39.914885] # 查询最近边,默认使用整条边的最近点计算 nearest_edges = ox.nearest_edges(G_proj, x_list, y_list)
内容的提问来源于stack exchange,提问作者c_m_conlan
相关产品推荐
相关产品推荐

