使用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
相关产品推荐
相关产品推荐

