【问题标题】:OSM generate route with spatial constraints in PythonOSM 在 Python 中生成具有空间约束的路线
【发布时间】: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”正在做的事情。我错了吗?

标签: python networkx osmnx


【解决方案1】:

您可以使用 OSMnx 计算您的原点和每个蓝点之间的矢量化大圆距离,然后将最近的作为第一个通过:https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.utils.great_circle_vec

这提供了最接近原点的粗略近似值,而无需对所有最短路径进行昂贵的计算。或者,如果这些蓝点带有时间戳,您可以按时间戳对它们进行排序,然后相应地计算通过它们的路线。

【讨论】:

  • 谢谢你的评论,大圆距离的问题是,如果我用我的车,最近的蓝点并不总是最近的,但它是一个起点,然后我可以比较根据您的方法,仅在 2-3 个最近的蓝色圆圈之间的行驶距离。
  • 如您所见,左侧的第二个和第三个蓝色圆圈靠近黄色道路,我希望我的路径将使用这条道路,但距离蓝色圆圈最近的节点不是一个点这条路。有没有办法生成一条将使用这条路而不是通过将最近的节点扔到这些蓝色圆圈的路径?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多