有人可以建议我如何做到这一点吗?提前感谢您。
这是一个使用Google Maps API解决的非常棘手的问题。以下是一种您可能要考虑的方法:
您可以轻松地计算出1公里范围内的边界圆,也很容易计算出落在该圆周上的点,对于任何角度。这个距离将是"直线距离"而不是实际的路程距离,但您可能想查看以下Stack Overflow帖子,了解具体实现方法:
在半径为1公里的边界圆上以20度间隔标记的截图:
已删除ImageShack链接 - 如何计算距离另一个点一定距离的latlng?
还有一个技巧可以将这些点捕捉到最近的街道。您可以查看Mike Williams的捕捉点到街道示例以获得良好的实现。
使用Google Maps API的方向服务可以计算从GPS点到每个捕捉道路点的道路距离。请注意,这仅适用于支持Google Maps中方向的国家,但更重要的是,道路距离几乎总是大于1km,因为我们的边界圆半径为1km。然而,如果您可以使用大致信息进行工作,则可能已经是一种可能的解决方案。
您还可以考虑从上述解决方案开始(1km边界圆,在圆周上计算x个点,并将它们捕捉到最近的道路),然后计算每条路径的道路距离(从GPS点到每个捕捉点),然后您可以为每条路径递归地重复此操作,每次使用较小的边界圆,直到接近1km的道路距离。您可以在每次递归中按比例减小边界圆的大小,以使算法更加高效。
更新:
我找到了一个非常不错的实现方式,似乎使用了与我上面描述的类似的方法:
请注意,您可以更改从顶部的度数间隔。使用宽间隔,您将获得快速结果,但可能会错过一些路线。
截图:
已删除失效的ImageShack链接 - 行车半径
稍微详细阐述一下Daniel的方法,首先要找到所有直线半径范围内的点,这就是你的起始节点集合。现在包括与这些节点相连的边和其他起始节点集合中的节点。现在检查节点是否连接,并且没有漂浮在外无法到达的节点。现在从你的车辆节点开始创建一个 "最短路径树"。
该树将为您提供从起始节点到所有其他节点的最短路径。请注意,如果您从最远的节点开始创建路径,则任何子路径也是途中到达这些节点的最短路径。确保标记沿途的这些子路径上的节点,以便您无需计算它们。最坏情况下,您需要为所有节点开发最短路径,但实际上,这应该花费更少的时间。