2020-12-16 19:40:08 版本 : 离线路径规划服务Graphhopper
作者: 朱鹏程 于 2020年12月16日 发布在分类 / 人防组 / 人防后端 下,并于 2020年12月16日 编辑
 历史版本

修改日期 修改人 备注
2022-05-23 15:50:26[当前版本] 朱鹏程 格式调整
2020-12-16 19:47:25 朱鹏程 格式调整
2020-12-16 19:45:38 朱鹏程 格式调整
2020-12-16 19:42:33 朱鹏程 格式调整

# 离线路径规划服务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还有其它很不错的功能也值得我们去探索

历史版本-目录  [回到顶端]
    知识分享平台 -V 4.8.7 -wcp