我有一组坐标,我将从一个位置的地址中提取坐标。 现在,我的任务是为这些点生成最佳路径。 我怎样才能完成这项任务?我见过两点生成路线的例子。但是当有多个目的地被覆盖时,我无法想象它在更大的范围内。 我正在使用此功能的Android应用程序。在地图上为一组坐标创建最佳路线
回答
如果您必须以特定顺序访问它们,问题可以简化为解决两点的路径:使用相邻坐标对以相同方式简单解决问题,然后将路径连接起来,将起点连接到终点。
如果您必须以任意顺序访问它们并优化行进距离,那么您正在解决实际上是NP-Hard的traveling salesman problem。唯一确切的解决方案是尝试所有排列,事实上,它与前一种情况相似,但是对于大量点而言,练习需要太多时间。首先,解决每对点的最短路径,只保留距离以节省内存。这将需要n(n-1)/ 2次操作。接下来,使用之前计算的数据生成坐标集的每个排列并计算与它们相关的路径。具有最小距离的置换(以及与其相关的路径)将是您的最佳序列。再次使用第一段中提到的方法生成路径。
该算法的第一步似乎很费时,但实际上它是第二步是非多项式。有非确切的解决方案运行速度更快,但它们的可靠性各不相同。您将必须使用试验和错误来决定它们是否适合您的应用程序。
我一直在线分析许多TSP解决方案。但我无法区分哪一个对我有利。 [TSP解析器](http://code.google.com/p/google-maps-tsp-solver/)和[另一个](http://www.nicecode.eu/a-java-tsp-solver- which-uses-google-maps-api /)另一个。 –
这是一种 “寻路” 或 “路由” 问题:
http://en.wikipedia.org/wiki/Pathfinding
而且往往面临着Dijikstra的算法:
http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
或者其概括称为“ A *算法“:
http://en.wikipedia.org/wiki/A-star_algorithm
在最近几年,这个东西已经演变成“收缩层次”的算法:
http://en.wikipedia.org/wiki/Contraction_hierarchies
这是更快,更高效。
这里有几个寻路/路由引擎。最好的一个可以说是开源路由机械:
你可以多找几个引擎在那里。只是谷歌周围的“地图路由”或“寻路”。
通常,引擎是一个(RESTful)Web服务,您必须通过网络访问,而不是您可以嵌入到Java/Android项目中的库。
我正在寻找一个可以在我的项目中使用的java中的TSP求解器。但我几乎找不到一个。我还研究了[车辆路径问题](http://en.wikipedia.org/wiki/Vehicle_routing_problem) ,但我找不到它的实现。仍然使用谷歌搜索,我希望我会很快到达。 此外,我很困惑要采取哪种方法。 –
- 1. 使用Google地图中的坐标列表创建路线
- 2. 创建用户ID(最佳路线)
- 3. 创建URL到here.com地图行车路线与沿地址/坐标传递
- 4. 在两个坐标点之间显示最佳三条路线
- 5. 为跳棋板创建坐标的最佳方式
- 6. 从坐标点创建等值线图
- 7. d3雷达图 - 径线创建路径但没有坐标
- 8. 谷歌地图获取路线上的坐标
- 9. 如何在s3中为d3创建坐标js地图
- 10. 如何创建一个谷歌地图阵列地理坐标
- 11. 获取从地图上画出一条直线上的坐标
- 12. Obj-c坐标数组 - 最佳实践?
- 13. 在谷歌地图v3创建路线,但避免标记
- 14. 的Javascript图表库为线路上坐标平面
- 15. 使用对数坐标轴在PDF图上绘制最佳拟合线
- 16. 在MapView上创建路线
- 17. 创建路线安卓谷歌地图
- 18. 创建离线地图和路由
- 19. Titanium Appcelerator - 使用地图创建路线?
- 20. IOS:使用谷歌地图绘制最佳路线路径
- 21. 如何在Google地图上创建路线Android API
- 22. 更多路线在一张地图上
- 23. 在Android上创建离线地图
- 24. 如何在地图视图上给出坐标线?
- 25. 使用C++创建一个坐标图
- 26. 使用鼠标创建地图的最佳方式是什么?
- 27. 如何在地图上的两个坐标之间显示路线查看
- 28. 在地图上直线绘制坐标(Jupyter)的最快方式是什么?
- 29. 从GPS坐标创建路径(样条线)
- 30. 为JMapViewer创建离线地图图块
你需要研究'旅行推销员'算法/问题。这是不平凡的。(不确定美国拼写是否为“旅行”,可能只是一个'l') – NickT
Android不使用Google Maps API V3。 (标记已删除) – Marcelo