OSMnx:有没有办法找到 2 个坐标之间的准确最短路径?
OSMnx: Is there a way to find an accurate shortest path between 2 coordinates?
想请问有没有办法求出2个坐标之间最准确的最短路径。
2个坐标如图所示为(-33.889606, 151.283306), (-33.889927, 151.280497)
黑色路径为理想路径,红色路径为get_nearest_node。
以下是代码:
import folium
import osmnx as ox
import networkx as nx
ox.config(use_cache=True, log_console=True)
G = ox.graph_from_point((-33.889606, 151.283306), dist=3000, network_type='drive')
G = ox.speed.add_edge_speeds(G)
G = ox.speed.add_edge_travel_times(G)
orig = ox.get_nearest_node(G, (-33.889606, 151.283306))
dest = ox.get_nearest_node(G, (-33.889927, 151.280497))
route = nx.shortest_path(G, orig, dest, 'travel_time')
route_map = ox.plot_route_folium(G, route)
route_map.save('test.html')
如果您在 graph_from_point
调用中设置 simplify=False
,您将在图表中获得更多节点,从而可以更精确地计算到这些坐标的距离。
您可以尝试使用一个名为 Taxicab 的包,它正是为此目的而创建的。
import osmnx as ox
import taxicab as tc
import matplotlib.pyplot as plt
G = ox.graph_from_point((-33.889606, 151.283306), dist=3000, network_type='drive')
G = ox.speed.add_edge_speeds(G)
G = ox.speed.add_edge_travel_times(G)
orig = (-33.889606, 151.283306)
dest = (-33.889927, 151.280497)
route = tc.distance.shortest_path(G, orig, dest)
fig, ax = tc.plot.plot_graph_route(G, route, node_size=30, show=False, close=False, figsize=(10,10))
padding = 0.001
ax.scatter(orig[1], orig[0], c='lime', s=200, label='orig', marker='x')
ax.scatter(dest[1], dest[0], c='red', s=200, label='dest', marker='x')
ax.set_ylim([min([orig[0], dest[0]])-padding, max([orig[0], dest[0]])+padding])
ax.set_xlim([min([orig[1], dest[1]])-padding, max([orig[1], dest[1]])+padding])
plt.show()
根据您的情况将产生以下结果:
免责声明我编写了 Taxicab 模块...
想请问有没有办法求出2个坐标之间最准确的最短路径。
2个坐标如图所示为(-33.889606, 151.283306), (-33.889927, 151.280497)
import folium
import osmnx as ox
import networkx as nx
ox.config(use_cache=True, log_console=True)
G = ox.graph_from_point((-33.889606, 151.283306), dist=3000, network_type='drive')
G = ox.speed.add_edge_speeds(G)
G = ox.speed.add_edge_travel_times(G)
orig = ox.get_nearest_node(G, (-33.889606, 151.283306))
dest = ox.get_nearest_node(G, (-33.889927, 151.280497))
route = nx.shortest_path(G, orig, dest, 'travel_time')
route_map = ox.plot_route_folium(G, route)
route_map.save('test.html')
如果您在 graph_from_point
调用中设置 simplify=False
,您将在图表中获得更多节点,从而可以更精确地计算到这些坐标的距离。
您可以尝试使用一个名为 Taxicab 的包,它正是为此目的而创建的。
import osmnx as ox
import taxicab as tc
import matplotlib.pyplot as plt
G = ox.graph_from_point((-33.889606, 151.283306), dist=3000, network_type='drive')
G = ox.speed.add_edge_speeds(G)
G = ox.speed.add_edge_travel_times(G)
orig = (-33.889606, 151.283306)
dest = (-33.889927, 151.280497)
route = tc.distance.shortest_path(G, orig, dest)
fig, ax = tc.plot.plot_graph_route(G, route, node_size=30, show=False, close=False, figsize=(10,10))
padding = 0.001
ax.scatter(orig[1], orig[0], c='lime', s=200, label='orig', marker='x')
ax.scatter(dest[1], dest[0], c='red', s=200, label='dest', marker='x')
ax.set_ylim([min([orig[0], dest[0]])-padding, max([orig[0], dest[0]])+padding])
ax.set_xlim([min([orig[1], dest[1]])-padding, max([orig[1], dest[1]])+padding])
plt.show()
根据您的情况将产生以下结果:
免责声明我编写了 Taxicab 模块...