谷歌地图:有一点,如何找到给定道路距离的所有点?

时间:2010-05-18 12:00:03

标签: algorithm google-maps

在我的应用程序中,GPS选择车辆的位置。然后,如果它在任何方向上行驶1公里,则应该在车辆可能存在的所有点放置标记(注意道路可能在其1KM范围内多次叉车)。

有人可以建议我怎么做吗?提前致谢。

4 个答案:

答案 0 :(得分:21)

使用Google Maps API解决这个问题非常棘手。以下是您可能需要考虑的一种方法:

  1. 您可以轻松计算GPS点周围1km的边界圆,并且可以很容易地计算落在该圆周上的点,对于任何角度。这个距离将是“作为乌鸦文件”而不是实际道路距离,但您可能需要查看以下Stack Overflow帖子以获得具体实现:

    How to calculate the latlng of a point a certain distance away from another?

    在半径为1km的边界圆上以20度间隔标记的屏幕截图:

  2. 删除了死亡的ImageShack链接 - 如何计算距离另一个点一定距离的点的latlng?

    1. 还有一个技巧可以将这些点捕捉到最近的街道。您可以查看Mike Williams' Snap point to street examples以获得良好的实施方案。

      使用Google Maps API的路线服务,可以计算从GPS点到每个捕捉的路点的道路距离。请注意,这仅适用于支持Google地图中方向的国家/地区,但更重要的是,道路距离几乎总是大于1公里,因为我们的边界圆“半径为1公里”,因为“乌鸦飞”。但是,如果您可以处理大致信息,这可能已经是一种可能的解决方案。

    2. 你也可以考虑从上面的解决方案开始(1km的边界圆,计算圆周上的x点,并将它们捕捉到最近的道路),然后计算每条路径的道路距离(从你的GPS点到每个捕捉的点),然后你可以递归地为每条路径重复这个,每次使用一个较小的边界圆,直到你达到接近1公里的道路距离。您可以减少每次递归中的边界圆,与误差范围成比例,以使您的算法更有效。


    3. <强>更新

      我发现了一个非常简洁的实现,似乎使用了与上述方法类似的方法:

      请注意如何从顶部更改度数的间隔。间隔很宽,你会得到快速的结果,但你很容易错过几条路线。

      截图:

      删除了死亡的ImageShack链接 - 驾驶半径

答案 1 :(得分:2)

自然强力算法是建立所有可能节点的列表,考虑每个十字路口上的每个可能的决策。

我怀疑在1公里内你平均会得到10个以上的十字路口,假设在十字路口平均有3个选择你会得到3 ^ 10 - 大约59,049个终点(注意你需要每个10个十字路口)道路的分支到达全数)。

实际上这个数字会下降,我认为通过不同的路线到达同一个节点并不罕见,尤其是在城市。

这种方法可以为您提供准确的答案(假设您有良好的街道地图作为输入)。这是潜在的时间,但是n似乎没那么高,所以它可能是实用的。

进一步的改进和优化可能是可能的,这取决于您需要这些节点的用途(或者您认为哪种类型的场景足以修剪它们)。

答案 2 :(得分:2)

在上面的Daniel的方法中详细说明,你想首先找到距你的原点直线半径内的所有点。那是你的一组节点。现在包括入射到起始集中的那些节点和其他节点的所有边。现在检查节点是否已连接,并且没有任何节点浮动,无法到达。现在从您的车辆节点开始创建“shortest path tree”。

树将为您提供从起始节点到所有其他节点的最短路径。请注意,如果您从最远节点创建路径开始,那么任何子路径也是沿途的最短路径。确保在继续时在子路径上标记这些节点,这样您就不需要计算它们。最糟糕的情况是,您需要为所有节点开发最短路径,但实际上这应该花费更少的时间。

答案 3 :(得分:0)

  1. 列出所有可能的节点,考虑每个十字路口上的每个可能的决定 (但是如何自动完成?
  2. 使用Dijkstra算法查找到所有点的关闭路线。
  3. 可视化数据。 (这有点棘手,因为在可到达区域内可能存在无法到达的区域。