作者:王柱柱 | 来源:互联网 | 2023-08-16 10:29
由于公司业务需求,需要一套离线路由规划服务,譬如提供出发地、目的地、途经点、交通方式、避开区域等,规划出一条或多条导航路由。离线,离线,离线。我们已经太依赖网络了。至于展示层就随
由于公司业务需求,需要一套离线路由规划服务,譬如提供出发地、目的地、途经点、交通方式、避开区域等,规划出一条或多条导航路由。离线,离线,离线。我们已经太依赖网络了。
至于展示层就随意,可选cesium、leaflet、osgEarth等。
于是乎本人就从零开始了,下面是一些关键的爬坑记录。
本人环境:win10 64位。
由于本人之前没接触过docker,所以废了好大的周折才爬完这两个坑,七窍都快冒烟了。
- 基于osrm
- 全称(Open Source Routing Machine - C++ backend)
- 官网 http://project-osrm.org
- github https://github.com/Project-OSRM/osrm-backend
- 下载http://download.geofabrik.de/asia/china-latest.osm.pbf(全国路网数据)。
- 安装docker(过程略)。
- docker pull osrm/osrm-backend(由于自己没接触过docker,看遍了官网也理解不到这一步)。
- 处理数据:docker run -t -v %cd%/data:/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/shanxi.pbf
- %cd%/data:/data:映射本机文件夹到镜像系统。%cd%是当前路径。冒号前面是本机的文件夹,冒号后面是镜像文件夹。
- osrm/osrm-backend:镜像名称。
- /opt/car.lua:镜像系统中的车配置文件。
- /data/shanxi.pbf:本机中的配置文件。
- 处理数据:docker run -t -v %cd%/data:/data osrm/osrm-backend osrm-contract /data/shanxi.osrm
- 经过上面两次的处理,在data文件中的数据如下:
- 开启服务:docker run -t -i -p 5000:5000 -v %cd%/data:/data osrm/osrm-backend osrm-routed /data/shanxi.osrm
- 说明:-p 5000:5000是将镜像端口映射到本机端口
- 访问测试:http://localhost:5000/route/v1/driving/114.818115,40.722283;112.532959,37.805444?steps=true
- 基于graphhopper
- 官网 https://www.graphhopper.com/developers
- github https://github.com/graphhopper/graphhopper
- 安装jdk(过程略)。
- 从github下载zip包、graphhopper-web-0.13.0.jar。
- 从zip包中复制config-example.yml到当前的目录。注释掉前面的没用的。
- 下载http://download.geofabrik.de/asia/china-latest.osm.pbf(全国路网数据)。
-
- 至此,以准备好三样东西:jar包,yml配置,.pbf数据。
- 打开cmd运行java -Xmx1g -Xms1g -Ddw.graphhopper.datareader.file=shanxi.pbf -jar graphhopper-web-0.13.0.jar server config.yml。出现如下界面:
- 访问测试:http://localhost:8989/route/?point=39.508279%2C112.456055&point=37.190955%2C112.571411&type=json&locale=zh-CN&vehicle=car&weighting=fastest&points_encoded=false
- 访问对应本地map:http://localhost:8989/maps/?point=39.508279%2C112.456055&point=37.190955%2C112.571411&locale=zh-CN&vehicle=car&weighting=fastest&elevation=false&use_miles=false&layer=Omniscale
- 个人总结:
1.每次更新配置文件/更改数据源,需要删除graph-cache下的文件。
2.增加这两个参数,能设置起点/终点的搜索范围。
index.high_resolution: 1000000
index.max_region_search: 40
3.源码文件在:E:\routeEngine\route\graphhopper-master\core\src\main\java\com\graphhopper\GraphHopper.java 下。
4.访问这个http://localhost:8989/info能拿到一些有用的数据。
5.更改配置文件的graph.flag_encoders: car,foot,统一提供车/步行服务。
6. 请求路径后面加上ch.disable=true,就可以用weighting=fastest/shortest模式了。
- 最后附上自己运行例子,纯离线:
个人总结:据官网介绍,osrm是可以作为一个lib与c++无缝结合的,这个有待研究,如果真这样的化,就完成摒弃了B/S架构这种模式,像osgEarth就无缝结合了。总体管局graphhoper的官网要比osrm写的详细的多,osrm运行性能要比它高,osrm可以脱离docker直接编译在win上。
个人demo下载地址:https://pan.baidu.com/s/1qQhVgsDe9zubLNjUyKZIVw 。
Gis地图离线路由规划服务搭建