# 离线路径规划服务Graphhopper
<font color=#999AAA >本文主要探索使用Graphhopper搭建离线路径规划服务,需要掌握一定的JAVA基础环境配置的知识
@[TOC](文章目录)
</font>
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
# 前言
<font color=#999AAA >在外网环境中可以使用百度、高德等第三方的sdk用以实现路径规划的功能,由于项目的需要,在离线环境中需要使用路径规划功能</font>
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
# 一、Graphhopper是什么?
<font color=#999AAA >Graphhopper 是基于JAVA开发的,使用OpenStreetMap为基础数据源的路线规划服务。
# 二、使用步骤
## 1.下载Graphhopper
在github上直接下载:[Graphhopper](https://github.com/graphhopper/graphhopper)
![<font color=#999AAA >代码如下(示例):](https://img-blog.csdnimg.cn/20201216180948669.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N5c2Rhcms=,size_16,color_FFFFFF,t_70)
下载完成后直接解压至指定目录下,目录如图所示
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201216181305381.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N5c2Rhcms=,size_16,color_FFFFFF,t_70)
## 2.从OpenStreetMap下载路图数据
路图的地址:[OpenStreetMap Data Extracts](http://download.geofabrik.de/)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201216182114981.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N5c2Rhcms=,size_16,color_FFFFFF,t_70)
下载.pdf文件,如下图所示下载的是国内的路图。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201216182210636.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N5c2Rhcms=,size_16,color_FFFFFF,t_70)
## 3.安装Graphhopper所需环境
JAVA环境的搭建在此就不赘述了,自行百度解决即可。
Graphhopper的新版本还需要Meven的环境,并配置环境变量,如果没有安装会自动下载至当前目录如图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201216182603445.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N5c2Rhcms=,size_16,color_FFFFFF,t_70)
下载完成配置一下meven的环境变量即可。
## 4.修改配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020121619264651.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N5c2Rhcms=,size_16,color_FFFFFF,t_70)
打开文件后可配置服务绑定的ip以及端口等
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201216192855495.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N5c2Rhcms=,size_16,color_FFFFFF,t_70)
## 5.启动Graphhopper
```bash
#先进入到graphhopper目录下,再执行以下语句
./graphhopper.sh -a web -i china-latest.osm.pbf
#china-latest.osm.pdf是下载的路图
```
如果报以下错误
```bash
-bash: ./graphhopper.sh: /bin/bash^M: bad interpreter: No such file or directory
```
可以尝试使用以下方式进行解决
```bash
sed -i 's/\r$//' ./graphhopper.sh #解决linux 跟Windows 对于换行符不同的区别
```
如果不成功可能是因为解析的地图数据过大导致内存溢出发生错误:
可以在执行启动之前先扩大内存
```bash
export JAVA_OPTS="-Xmx4g -Xms4g"#加大至4G内存
```
# 总结
Graphhopper整个使用的过程也并不复杂,只需要细心配置即可。
路径规划及导航的精度主要还是来自与路图数据的精确度,OpenStreetMap上对于国内的路线信息还是比较落后的,建议可以从别的地方获取最新的更为精准是数据源,再转成Graphhopper所需要是数据格式再使用效果会更好。
Graphhopper还有其它很不错的功能也值得我们去探索