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

