3

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

我的起点-终点坐标有时位于一条长直线路的中间。但是,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. 选择距离最小的路径
4

1 回答 1

1

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

您可以尝试几件事:

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

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

于 2019-04-09T21:46:03.103 回答