我想在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
如果我尝试通过最短路径算法查找路线并将其可视化在地图上,则效果很好。但我想绘制此特定路线
答案 0 :(得分:0)
OSMnx使用节点的OSMID。运行G=nx.convert_node_labels_to_integers(G)
时,将覆盖这些OSMID。但是,您也没有在图形边缘的u
和v
属性中覆盖它们(使用OSMID标识边缘的端点)。
答案 1 :(得分:0)
将networkx导入为nx
将osmnx导入为牛
导入请求
将matplotlib.cm导入为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,位置点)
destination_node = list(G.nodes())[-1]
shortest_path = nx.shortest_path(G,origin_node,destination_node)