Как построить путь на основе некоторых «вручную выбранных» узлов на osmnx? - PullRequest
0 голосов
/ 24 января 2019

Я хочу построить маршрут на карте osmnx. Когда я пытаюсь создать маршрут вручную, он не работает.

import networkx as nx
import osmnx as ox
import requests 
import matplotlib.cm as cm
import matplotlib.colors as colors
location_point = (50.345559621674596, 7.576892382877531)
G = ox.graph_from_point(location_point, distance=500, 
distance_type='network', network_type='walk')
origin_node = ox.get_nearest_node(G, location_point)
destination_node = list(G.nodes())[-1]
fig, ax = ox.plot_graph(G)
G=nx.convert_node_labels_to_integers(G)
route = [3 ,1 ,41 ,40 ,98 ,62 ,67 ,107 ,94 ,83 ,39 ]
ox.plot_route_folium(G,route)

Я ожидаю карту с цветным маршрутом, но вместо этого я получаю эту ошибку.

    ---------------------------------------------------------------------------
    IndexError                                Traceback (most recent call last)
    <ipython-input-9-11235dc07ef4> in <module>()
    ----> 1 ox.plot_route_folium(G,route)

    ~\Anaconda3\lib\site-packages\osmnx\plot.py in plot_route_folium(G, route, route_map, popup_attribute, tiles, zoom, fit_bounds, route_color, route_width, route_opacity)
        907     gdf_edges = graph_to_gdfs(G, nodes=False, fill_edge_geometry=True)
        908     route_nodes = list(zip(route[:-1], route[1:]))
    --> 909     index = [gdf_edges[(gdf_edges['u']==u) & (gdf_edges['v']==v)].index[0] for u, v in route_nodes]
        910     gdf_route_edges = gdf_edges.loc[index]
        911 

    ~\Anaconda3\lib\site-packages\osmnx\plot.py in <listcomp>(.0)
        907     gdf_edges = graph_to_gdfs(G, nodes=False, fill_edge_geometry=True)
        908     route_nodes = list(zip(route[:-1], route[1:]))
    --> 909     index = [gdf_edges[(gdf_edges['u']==u) & (gdf_edges['v']==v)].index[0] for u, v in route_nodes]
        910     gdf_route_edges = gdf_edges.loc[index]
        911 

    ~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in __getitem__(self, key)
       2082 
       2083         if is_scalar(key):
    -> 2084             return getitem(key)
       2085 
       2086         if isinstance(key, slice):

    IndexError: index 0 is out of bounds for axis 0 with size 0

Если я пытаюсь найти маршрут по алгоритму кратчайшего пути и визуализировать его на карте, он работает нормально. Но я хочу построить этот конкретный маршрут

Ответы [ 2 ]

0 голосов
/ 13 июля 2019

Я сделал для кратчайшего пути, для любого пути, пожалуйста, убедитесь, что ваши пути связаны с точки зрения osmid, который вы можете найти, просто запросив путь из nx.simple_paths (G, source, destination). Если osmid не подключен, вы получите эту ошибку. Надеюсь это поможет. :)

импорт networkx как nx

импорт osmnx как вол

запросы на импорт

импорт matplotlib.cm как см

импорт matplotlib.colors в цветах

location_point = (50,345559621674596, 7,576892382877531)

G = ox.graph_from_point (location_point, distance = 500, distance_type = 'network', network_type = 'walk')

origin_node = ox.get_nearest_node (G, location_point)

destination_node = list (G.nodes ()) [- 1]

shortest_path = nx.shortest_path (G, origin_node, destination_node)

ox.plot.plot_graph_route (G, shortest_path) path created between the nodes

0 голосов
/ 08 февраля 2019

OSMnx использует OSMID узлов. Когда вы запускаете G=nx.convert_node_labels_to_integers(G), вы перезаписываете эти OSMID. Однако вы также не перезаписали их в атрибутах ребер графа 'u и v, которые идентифицируют конечные точки ребра (используя OSMID).

...