You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OSMnx获取路径仅得起止点OSM ID,如何获取完整路径坐标?

获取OSMnx最短路径的全部坐标

你提到的shortest_route实际是路径上所有节点的OSM ID列表(若两点直接相连则仅含起止点),要获取完整路径的坐标,可通过以下两种OSMnx原生方法实现:

方法1:使用ox.route_to_gdf(推荐,适配批量处理)

该函数可直接将路径转换为GeoDataFrame,包含节点、路段的完整几何信息与属性,非常适合处理大量点位对。

修改你的代码如下:

import osmnx as ox
import networkx as nx
import pandas as pd

ox.config(use_cache=True, log_console=True)
G = ox.graph_from_place('Sydney,New South Wales,Australia', network_type='drive')

# 获取起止节点
orig_node = ox.get_nearest_node(G, (intersections['lat'][0], intersections['lon'][0]))
dest_node = ox.get_nearest_node(G, (intersections['lat'][1], intersections['lon'][1]))

# 获取按时间权重的最短路径
shortest_route = nx.shortest_path(G, orig_node, dest_node, weight='time')

# 将路径转换为GeoDataFrame
route_gdf = ox.route_to_gdf(G, shortest_route)

# 提取所有节点的经纬度列表
node_coords = []
for node_list in route_gdf['nodes']:
    node_coords.extend([(G.nodes[n]['y'], G.nodes[n]['x']) for n in node_list])

# 提取路段的完整几何(含节点间的道路曲线)
full_route_geometry = route_gdf['geometry'].tolist()
  • route_gdf的geometry字段存储了每段道路的完整空间形状,不仅包含节点坐标,还保留了道路的曲线细节
  • nodes字段记录了每段道路连接的节点ID,可通过遍历提取所有节点的经纬度(OSMnx中节点的y为纬度,x为经度)

方法2:手动提取节点坐标

若仅需路径上所有节点的经纬度列表,可直接遍历shortest_route中的节点ID:

# 提取路径所有节点的经纬度
route_coords = [(G.nodes[node]['y'], G.nodes[node]['x']) for node in shortest_route]

得到的route_coords是按路径顺序排列的经纬度列表,可直接用于后续处理。

批量处理优化建议

针对75000个点位的处理需求:

  • 确保图G仅加载一次,避免重复下载与构建开销
  • 可将点位对分组,循环调用ox.route_to_gdf批量生成路径数据,效率远高于单条处理
  • 已开启的use_cache=True会自动缓存OSM数据,避免重复请求

内容的提问来源于stack exchange,提问作者gpvt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:45:36