我希望制作一个利用OSM服务并运行我选择的算法来查找路线的Android应用,例如A *或Dijkstra的启发式搜索。
OSM的Routing Wiki页面有一些不错的指针,但是它没有提供有关如何在应用程序中实现自己的算法的任何见解。
此答复是概述,它可以帮助您更好地定位环境并找到解决问题的方法。您的问题过于笼统,无法给出确切的简单答案,但我确实理解您为什么要提出这样的问题。
您可以使用Osmdroid库显示您在Android上拥有的路线。
请记住,Osmdroid的核心功能是显示地图图块。地图图块只是位图,因此您需要在线图块源或离线图块源。如何做到这一点在文档中以及部分关于SO的其他问题中都有介绍。这是一个太大的话题,无法在此处详细说明。为了清楚起见:Osmdroid无法直接呈现带有原始OpenstreetMap数据的.osm
文件。地图图块通常以非常复杂的方式从该数据中渲染,而不是即时生成的。
Osmdroid库中另一个非常重要的功能是显示所谓的叠加层的功能。例如。标记,多边形等。您可以使用这些标记在地图和其他希望显示的要素上绘制路线。文档中再次对此进行了介绍,太大了,无法在此处进行详细说明。
[支持Osmdroid的路由(Osmbonuspack中为AFAIK),但这就是使用一些第三方服务来获取路由数据并显示出来。根据您的评论,您想实现自己的算法,因此这对您没有用。
所以最后一部分是如何将算法集成到其中。这不是一个简单答案的简单问题。从OpenstreetMap数据库(.osm
文件)获取运行算法所需的数据开始,您几乎需要自己做所有事情。我认为没有API可以为您提供合理的方式来以适合于路由计算的形式访问数据。我将选择的方法是开发某种预处理,该预处理将使用.osm
文件或具有数据的数据库,并产生我自己的表示导航图的结构。然后,我将在应用程序中包含此图并在该数据上运行算法。我的算法的输出将是路线:用于绘制折线的坐标列表。
如果您需要覆盖的区域足够小,则可以从在项目中包含.osm
文件开始,然后以与现在相同的方式运行算法。也许这足以满足您的情况。
[寻找灵感的一个有趣的项目是Graphopper-他们完全构建了我上面所说的内容,并使用它为Android / iO和Web API提供了一个库。但是核心是相同的-将OSM数据预处理为图形数据并在其上运行算法。由于您希望自己实现算法,因此该库将无济于事(除非您分叉项目并对其进行修改),但它可能是宝贵的学习资源。