【发布时间】:2020-04-18 00:52:56
【问题描述】:
我想使用 NetworKX 和 OSMnx 在起点和终点之间生成一条路线。
原点是绿点,黑点是目的地。
我的想法是找到原点到第一个蓝色圆圈,从第一个到第二个等之间的最短路径。但我不知道如何让程序决定哪个是第一个蓝色圆圈。
我想计算每个蓝色圆圈到原点之间的路线,但在有很多蓝色圆圈的情况下,可能需要大量计算。 关于如何选择第一个或重建起点和目的地之间的轨迹有什么想法吗?
【问题讨论】:
-
我不熟悉 Python,但在 C++ 中我使用 Boost Graph Library、Dijkestra 算法解决了类似的问题,即 2 点之间的最短路径问题,您可以使 2 点之间的每条路径从绿色开始传递给蓝色,稍后您将所有最短路径累积在一起以形成您的路径。当然,首先您应该使用 OSM 文件的节点构建一个图,并将该图传递给 Dijkestra 算法。
-
谢谢,你的意思是我应该在绿色圆圈和所有蓝色圆圈之间开辟一条路径吗?这是我想要避免的。构建图表是什么意思?
-
据我了解,您想减少与在您的点之间分别寻找每条最短路径相关的计算成本,这是您想要实现的吗?构建图,意味着将 OSM 文件中的节点分配给图中的顶点,并根据节点之间的连接性和边的权重分配图的边
-
是的,计算每个位置到所有其他位置之间的距离是 n^2,所以可能太多了。节点已经在这个 OSM 文件中,这就是函数“graph_from_bbox”正在做的事情。我错了吗?