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

问题描述 投票:3回答:1

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

我的起点 - 目的地坐标有时位于长直线道路的中间。但是,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. 选择距离最小的路径
networkx osmnx
1个回答
0
投票

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

你可以试试几件事:

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

另见:https://stackoverflow.com/a/55601732/7321942

© www.soinside.com 2019 - 2024. All rights reserved.