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

如何用OSMNX计算步行与骑行时间?问题及解决思路

OSMnx步行/骑行路线时间计算问题

我在计算步行与骑行路网的距离和时间时,发现系统默认采用汽车最高速度计算行程时间。即便步行/骑行路网包含限速50km/h或30km/h的主次干道,行人或骑行者的通行速度仍被设为汽车速度。

按照官方文档中的速度与行程时间添加方法:

G= ox.add_edge_speeds(G, hwy_speeds)
G= ox.add_edge_travel_times(G)

其中hwy_speeds仅用于补全缺失值,我尝试将所有速度替换为4km/h但未成功,曾考虑将图转换为GeoDataFrame修改maxspeed后转回图结构,希望获得解决方法。

问题复现代码

import osmnx as ox

place = {"city": "kreuzberg", "country": "germany"}
boundary = ox.geocode_to_gdf(place)

G = ox.graph_from_polygon(boundary ['geometry'][0], 
network_type="walk", simplify=True)

x1 = 13.429755712125107 
y1 = 52.501651988374334
x2 = 13.379465339856976 
y2 = 52.485907177089004

orig = ox.distance.nearest_nodes(G, X=x1, Y=y1)
dest = ox.distance.nearest_nodes(G, X=x2, Y=y2)

route = ox.shortest_path(G, orig, dest, weight="travel_time")

G = ox.add_edge_speeds(G)
G = ox.add_edge_travel_times(G)

route_time = int(sum(ox.utils_graph.get_route_edge_attributes(G, route, "travel_time")))
route_length = int(sum(ox.utils_graph.get_route_edge_attributes(G, route, "length")))

运行结果

print("Route time: {} seconds, route length: {} meters".format(route_time/60, route_length))

>>> Route time: 5.283 minutes, route length: 3428 meters

这段3公里的步行路线计算出的时间仅为5分钟,对应速度约38km/h(甚至快于汽车)。我未在文档中找到脱离maximum speed标签指定路段速度的方法。

临时方案

若无现成方法计算步行(3-4km/h)和骑行(14-18km/h)时间,我将采用以下临时方案:

gdf = ox.graph_to_gdfs(G)
gdf[1]['maxspeed'] = 4
G = ox.graph_from_gdfs(gdf[0], gdf[1])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:50:21