【问题标题】:OSMnx: Is there a way to find an accurate shortest path between 2 coordinates?OSMnx:有没有办法找到两个坐标之间的准确最短路径?
【发布时间】:2020-10-19 13:41:02
【问题描述】:

我想问是否有办法找到 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')

【问题讨论】:

    标签: python openstreetmap shortest-path osmnx


    【解决方案1】:

    如果您在graph_from_point 调用中设置simplify=False,您将在图表中获得更多节点,从而可以更精确地计算到这些坐标的距离。

    【讨论】:

      【解决方案2】:

      您可以尝试使用一个名为 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()
      

      根据您的情况,这将产生以下结果:

      免责声明我创作了出租车模块...

      【讨论】:

      • 这太棒了!你能不能也加入一些驾驶时间的功能?那将是惊人的!
      • 或出租车内的 get_route_edge_attributes 函数。我很高兴合作编写代码。
      • 谢谢!是的,我绝对愿意接受新功能。对开车时间以外的任何事情感兴趣?
      猜你喜欢
      • 2017-02-06
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多