如何使用 OSMNX 计算步行和骑行时间?

问题描述 投票:0回答:1

我一直在尝试计算步行和骑自行车网络的距离和时间。

显然,计算行驶时间时始终考虑最大速度(对于汽车)。因此,如果步行或自行车网络有一些主要/次要..汽车街道,最大速度为 50 公里/小时或 30 公里/小时,穿过这些街道的行人或骑自行车的人也会以汽车速度行驶。

这是根据文档和本指南将速度和行程时间输入路段的方法:routing-speed-time

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

hwy_speeds 是仅用于缺失值的输入器。一直试图将所有速度更换为4公里/小时,但没有成功。另一个想法是将图形转换为地理数据帧,替换最大速度,然后返回图形。 我希望得到一些帮助,也许我错过了一些东西。谢谢。

编辑 这是返回 3 公里路线步行 5 分钟的工作示例:

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

这大约是 38 公里/小时。 (即使对于汽车来说这也可能太快了?) 在文档中没有找到如何指定实际上不基于 'maximun speed' 标签

的段的速度

这是我将使用的解决方法,以防没有实现的方法来计算步行速度(3-4公里/小时)和骑自行车速度(14-18小时/小时)的时间

gdf = ox.graph_to_gdfs(G) gdf[1]['maxspeed'] = 4 G = ox.graph_from_gdfs(gdf[0], gdf[1])
    
routes osmnx
1个回答
0
投票
查看osmnx的源代码后,我发现你需要做的就是添加一个“speed_kph”边缘属性。这是我的代码示例:

if network_type == 'drive': # Add travel times and speed to the edges of the graph G = ox.add_edge_speeds(G, hwy_speeds=100, fallback=50) elif network_type == 'walk': # Manually set every path to 5 kph (avg walking speed) nx.set_edge_attributes(G, values=5, name="speed_kph") # Calculate travel times like normal G = ox.add_edge_travel_times(G)
我确信您也可以轻松地对其进行调整以硬编码平均骑行速度。

© www.soinside.com 2019 - 2024. All rights reserved.