计算源自中边缘的点的最短路径

时间:2019-04-09 03:48:27

标签: networkx osmnx

我有一组原点坐标,我想计算它们之间的最短路径。

我的原点-目标坐标有时位于一条长直线道路的中间。但是,OSMnx / networkx计算出的最短路径不会考虑到最近节点路径的中边缘。

OSMnx或networkx中是否有任何可用的功能可以用来查找在道路中间开始/结束的最短路径?

如果没有这样的功能,我正在考虑使用以下步骤。

  1. 获取出发地和目的地的最近边缘
  2. 获取最近边缘的节点:假设(a,b)代表起点,(c,d)代表目的地
  3. 计算4种可能组合的距离:a-> c,a-> d,b-> c,b-> d
  4. 将原点/目标投影到最接近的边缘:我们称它们为o1和e1
  5. 计算距离o1-> a,o1-> b,e1-> c,e1-> d
  6. 将(5)距离增加(3):
    • o1-> a-> c-> e1
    • o1-> a-> d-> e1
    • o1-> b-> c-> e1
    • o1-> b-> d-> e1
  7. 选择距离最小的路径

1 个答案:

答案 0 :(得分:0)

OSMnx生成用于路由/分析的networkx图形对象。如您所述,networkx最短路径计算需要一个起点和一个目标节点,因此尝试从边缘中点计算最短图形路径将不起作用。

您可以尝试以下几种方法:

  1. 在创建图形时尝试设置simplify=False,以在街道中间尽可能多地保留节点。
  2. 如果这不起作用,您可以尝试将边缘(大于某个阈值长度)细分为50米的块,或将其细分为带有更多节点的离散块。

另请参阅:https://stackoverflow.com/a/55601732/7321942