В Европе довольно распространено разрешение велосипедистам проезжать по улицам с односторонним движением в обоих направлениях (я не знаю, существует ли это в Северной Америке). ). Соответствующие ребра в OSM помечены тегами oneway=yes и oneway:bicycle=no.
Использование функции osmnx.k_shortest_paths в графе с network_type='bike' я обнаружил, что ездить по улицам с односторонним движением в противоположном направлении запрещено, хотя это разрешено законом.
Это код, который я использовал для тестирование. Для моторизованного транспорта Мариенштрассе в ее северной части разрешено использовать только в направлении на север. Для велосипедов проезд в обе стороны бесплатный. Тем не менее, функция маршрутизации делает объезд при движении на юг. В другом (обычно разрешенном) направлении используется улица. Я включил тест, правильно ли промаркированы края (а это так).
Код: Выделить всё
import osmnx as ox
add_tags = (['oneway:bicycle'])
ox.settings.useful_tags_way = ox.settings.useful_tags_way + add_tags
G = ox. graph_from_place("Karlsruhe, Germany", network_type='bike')
start = ox.nearest_nodes(G, 8.408005310258606, 49.003891115254056, return_dist=False) # Kommödchen
dest = ox.nearest_nodes(G, 8.408489900323096, 48.99637841654651, return_dist=False) # Yuki Sushi
test = ox.k_shortest_paths(G, start, dest, 1, weight='length')
test_list = list(test)
test_nodes = test_list[0]
test_edges = ox.utils_graph.route_to_gdf(G, test_nodes, weight='length')
fig, ax = ox.plot_graph_route(G, test_nodes, route_color='r', route_linewidth=5, node_size=20)
test_backwards = test = ox.k_shortest_paths(G, dest, start, 1, weight='length')
back_list = list(test_backwards)
back_nodes = back_list[0]
back_edges = ox.utils_graph.route_to_gdf(G, back_nodes, weight='length')
fig_b, ax_b = ox.plot_graph_route(G, back_nodes, route_color='r', route_linewidth=5, node_size=20)
for index, row in back_edges.iterrows():
print(row["oneway"], row["oneway:bicycle"])
Подробнее здесь: https://stackoverflow.com/questions/786 ... -type-bike