我一直在尝试计算步行和骑自行车网络的距离和时间。
显然,计算行驶时间时始终考虑最大速度(对于汽车)。因此,如果步行或自行车网络有一些主要/次要..汽车街道,最大速度为 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])
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)
我确信您也可以轻松地对其进行调整以硬编码平均骑行速度。