GraphHopper是一种快速且内存有效的Java导航引擎,默认使用OSM和GTFS数据,也可导入其他的数据源。支持CH(Contraction Hierarchies)、A*、Dijkstra算法。
优点:
1、算法。Dijkstra算法运行得较慢,但确实能保证找到一条最短路径。最佳优先搜索(BFS)运行得较快,但是它找到的路径不一定是最好的。A*算法把启发式方法(heuristic approaches)如BFS,和常规方法如Dijsktra算法结合在一起的算法。A*是路径搜索中最受欢迎的选择,因为它相当灵活,并且能用于多种多样的情形之中。A*潜在地搜索图中一个很大的区域。和Dijkstra一样,A*能用于搜索最短路径。和BFS一样,A*能用启发式函数(注:原文为heuristic)引导它自己。在简单的情况中,它和BFS一样快;
2、开源。代码开源,可本地部署服务,利用OSM实现离线路径导航,便于构建自己的服务。后期如果考虑对算法进行改进的话,扩展空间比较大;
3、效率。相比较于调用远程服务,调用本地路径规划服务会更快。路径寻找比谷歌地图还要快,与OSRM速度相当(350km路径,平均时间0.8s(0.4s-1.2s));
4、成熟度。已存在一些开源版本的成功运用,且有官方网站、论坛等;
5、功能。导航系统的核心功能是根据地理数据,利用算法进行路径规划导航。Graphhopper实现了路径导航功能,并且支持中文。
分为两个版本:开源和商业版本。本文主要讲述开源版本的离线搭建过程,这里主要利用源码进行搭建,搭建过程比较简单。
1、搭建之前要保证jdk安装完成,且完成环境变量配置。网上有一大推的教程,自行进行校验安装;
2、下载Graphhopper( https://github.com/graphhopper/graphhopper)master分支代码
解压文件,注意这里尽量不要解压到具有中文名称的路径中,否则可能会导致服务无法正常启动情况;
3、到OSM上下载地图数据。例如: http://download.geofabrik.de/europe/germany/berlin.html
下载完成后,将文件放在根目录文件中
4、cd到文件夹中,输入命令: ./graphhopper.sh -a web -i berlin-latest.osm.pbf,启动服务,启动成功如下;
5、以route请求为例,查找坐标点之间的路径,打开浏览器输入: http://localhost:8989/route?point=52.51834,13.394174&point=52.421542,13.31665&type=json&locale=zh-CN&vehicle=car&weighting=fastest&points_encoded=false
成功返回结果;
6、如果不知道坐标范围,可输入 http://localhost:8989/info显示坐标范围: