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

Python实现真实地图两点间路线规划及各点到达时间计算

OSMnx路线规划问题解决方案

1. 节点ID转经纬度

OSMnx路网图的每个节点字典中直接存储了经纬度信息:graph.nodes[node_id]['y']对应纬度,graph.nodes[node_id]['x']对应经度。遍历路径节点列表,即可批量转换为经纬度坐标。

2. 计算各点到达时间

  • 自定义速度场景:先获取路段长度(单位:米),将长度转换为公里后除以自定义速度(单位:km/h)得到小时数,再转换为秒/分钟等单位,累加每段时间得到各节点的累计到达时间。
  • 默认时间权重场景:OSMnx已为路网边添加travel_time属性(基于默认速度计算),直接累加相邻节点间的travel_time即可。

3. 优化代码运行速度

  • 缩小路网范围:用graph_from_point替代graph_from_place,以起点终点的中点为中心,下载指定半径内的路网,避免加载整个城市的超大图。
  • 简化路网:开启simplify=True(OSMnx默认开启),合并冗余节点和边,减少计算量。
  • 批量调用API:一次性获取起点和终点的最近节点,减少函数调用次数。

完整解决方案代码

import osmnx as ox
import networkx as nx

# OSMnx基础配置
ox.settings.log_console = True
ox.settings.use_cache = True
ox.settings.simplify = True

# 输入参数
start_latlng = (35.73509, 51.4171)
end_latlng = (35.73674, 51.40611)
mode = 'walk'
custom_speed = 4.5  # 自定义步行速度,单位:km/h
optimizer = 'time'

# 加载指定范围的路网(半径1500米,覆盖起点终点)
center_point = ((start_latlng[0] + end_latlng[0])/2, (start_latlng[1] + end_latlng[1])/2)
graph = ox.graph_from_point(center_point, dist=1500, network_type=mode)

# 批量获取起点、终点的最近节点
orig_node, dest_node = ox.distance.nearest_nodes(graph, 
                                                 [start_latlng[1], end_latlng[1]],
                                                 [start_latlng[0], end_latlng[0]])

# 计算最短路径
shortest_route = nx.shortest_path(graph, orig_node, dest_node, weight=optimizer)

# 转换节点为经纬度坐标
route_coords = [(graph.nodes[node]['y'], graph.nodes[node]['x']) for node in shortest_route]

# 计算各节点到达时间(单位:秒)
arrival_times = [0.0]  # 起点时间设为0
for i in range(len(shortest_route)-1):
    u, v = shortest_route[i], shortest_route[i+1]
    # 获取路段长度,用自定义速度计算时间
    segment_length = graph.edges[u, v, 0]['length']
    segment_time = (segment_length / 1000) / custom_speed * 3600
    # 若使用默认travel_time,替换为:segment_time = graph.edges[u, v, 0]['travel_time']
    arrival_times.append(arrival_times[-1] + segment_time)

# 生成期望格式的结果
result = list(zip(route_coords, arrival_times))

# 输出结果
for item in result:
    print(item)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:50:40