【问题标题】:GPS Navigation AlgorithmGPS导航算法
【发布时间】:2017-09-24 22:24:18
【问题描述】:

我有数千个来自车辆的输入 GPS 值,我想将这些值映射到道路图上节点给出的特定值。拍摄下图。每个节点 (A-F) 都有关于连接到它的前一条边的信息(以及纬度/经度)。我想将其中一些信息与我输入的 GPS 坐标中的每个 GPS 点进行匹配。

路线图

到目前为止,我能够做到这一点,但有一些极端情况。以图像为例,当我们到达节点 B 时,我们认为我们可能在路径 BCD 或路径 BEF 上。直到节点相距足够远,我们才知道我们使用输入采取了哪条路线。这是因为道路不仅仅是一条二维线。它们有宽度,车辆可能在路边。很难确定它在哪条道路上,因为我们不知道道路的宽度。因此,当我们到达节点 B 时,车辆可以在 BC 或 BE 之间。直到后来沿着每条路径,我们才知道我们在哪里。

话虽如此,我们可以遍历每条路线,直到我们只有一个选择,因此我们知道我们在这条路上。我们可以从正确路径上的所有先前节点回填数据。但是,我在为此提出算法时遇到了问题。

如何在代码中处理这个问题?我考虑过在每个交叉路口进行 DFS,并找出哪条路径包含来自车辆的输入点的边数最多。有没有更好的办法?

【问题讨论】:

    标签: algorithm navigation graph-theory


    【解决方案1】:

    我会首先将 gps 输入映射到节点,但在映射操作期间,每个节点都应将 count++ 传播到父节点(如果可能循环,则检测循环)。您只能传播到(但没有)交叉点观点。比你可以沿着这条路走,在十字路口取最大的价值,沿着那条路走。

    你最终会得到类似的东西(例如):

    0 -> 0 -> 4 -> 3 -> 1
         |
         ---> 2 -> 1 -> 0
    

    在第二个节点中,您将选择“上”方向。重要的是你只传播到parent->numberOfNeighbours > 1 的地方,因为你总是要到达十字路口,所以不需要进一步传播。

    【讨论】:

    • 这可能行得通,但我很好奇如果两条道路平行并且我们不确定我们在多于一个交叉路口的哪条道路上会发生什么。我们是否遍历图直到达到不可行的长度?或者我们不可能有多个交叉路口,我们仍然不确定我们在哪条路上。想象一下这样一种情况,我们有一个匝道,它通向一个立交桥,两条道路在同一方向,但高度不同。在这种情况下,我们可能需要一段时间才能分道扬镳。
    • 您应该将检查限制在某个半径范围内,并仅考虑该半径范围内的路径更改,同时考虑上一次移动的权重。或多或少,如果您向右转(最强信号)并且在您向前移动之后,您可以建立一个有利于当前路径的权重函数,直到没有来自另一条平行路径的足够强的信号(因此您的当前路径更长 - 更难将其更改为平行线(只要没有交叉路口!)。如果出现此类信号,您将当前路径更改为平行线(这样您不仅可以在十字路口,而且可以随时分流
    【解决方案2】:

    如果我对问题的理解正确,一旦你到达节点 B,你就会对前面的路径有些不确定。然而,在到达节点 C 或 E 时,现在知道前进的路径,直到下一个出度大于 1 的节点。

    然后,我认为您只需跟踪您的路径直到一个交叉点并列出与该交叉点相邻的所有节点(类似于 BFS)。检查此可能节点列表,一旦找到一个,将其添加到当前路径。此时,您将知道您所在的道路,并可以预测到下一个十字路口的前进路径,重复直到您的目的地。

    【讨论】:

    • 问题是,在到达节点 C 和 E 时,我们仍然不知道我们在哪条路上。为什么是这样?这是因为道路有宽度,它不是二维线。如果车辆在道路 BCD 上,但距离边缘足够近,我们的算法不知道它是否真的在 BCD 上,而是可能在 BEF 上。当您检查道路 BEF 时,我们看到车辆最终离 BCD(实际位置)太远,然后我们可以回溯并走正确的道路 BCD。
    • 我的问题是如何在代码中正确实现这一点。
    猜你喜欢
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多