Gis地图离线路由规划服务搭建

Posted airduce

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gis地图离线路由规划服务搭建相关的知识,希望对你有一定的参考价值。

  由于公司业务需求,需要一套离线路由规划服务,譬如提供出发地、目的地、途经点、交通方式、避开区域等,规划出一条或多条导航路由。离线,离线,离线。我们已经太依赖网络了。
至于展示层就随意,可选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
  1.    下载http://download.geofabrik.de/asia/china-latest.osm.pbf(全国路网数据)。
  2. 安装docker(过程略)。
  3. docker pull osrm/osrm-backend(由于自己没接触过docker,看遍了官网也理解不到这一步)。
  4. 处理数据:docker run -t -v %cd%/data:/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/shanxi.pbf
    1. %cd%/data:/data:映射本机文件夹到镜像系统。%cd%是当前路径。冒号前面是本机的文件夹,冒号后面是镜像文件夹。
    2. osrm/osrm-backend:镜像名称。
    3. /opt/car.lua:镜像系统中的车配置文件。
    4. /data/shanxi.pbf:本机中的配置文件。  
  5. 处理数据:docker run -t -v %cd%/data:/data osrm/osrm-backend osrm-contract /data/shanxi.osrm
  6. 经过上面两次的处理,在data文件中的数据如下:
  7. 技术图片
  8. 开启服务:docker run -t -i -p 5000:5000 -v %cd%/data:/data osrm/osrm-backend osrm-routed /data/shanxi.osrm
    1. 说明:-p 5000:5000是将镜像端口映射到本机端口
  9. 访问测试: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
  1. 安装jdk(过程略)。
  2. 从github下载zip包、graphhopper-web-0.13.0.jar。
  3. 从zip包中复制config-example.yml到当前的目录。注释掉前面的没用的。
  4. 下载http://download.geofabrik.de/asia/china-latest.osm.pbf(全国路网数据)。
    • 至此,以准备好三样东西:jar包,yml配置,.pbf数据。
  1.   打开cmd运行java -Xmx1g -Xms1g -Ddw.graphhopper.datareader.file=shanxi.pbf -jar graphhopper-web-0.13.0.jar server config.yml。出现如下界面:
  2. 技术图片
  3. 访问测试: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
  4. 技术图片
  5. 访问对应本地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
  6. 技术图片
  7. 个人总结:

    1.每次更新配置文件/更改数据源,需要删除graph-cache下的文件。

    2.增加这两个参数,能设置起点/终点的搜索范围。

    index.high_resolution: 1000000
    index.max_region_search: 40

    3.源码文件在:E: outeEngine outegraphhopper-mastercoresrcmainjavacomgraphhopperGraphHopper.java 下。

    4.访问这个http://localhost:8989/info能拿到一些有用的数据。

    5.更改配置文件的graph.flag_encoders: car,foot,统一提供车/步行服务。

    6. 请求路径后面加上ch.disable=true,就可以用weighting=fastest/shortest模式了。

  8. 最后附上自己运行例子,纯离线:
  9. 技术图片

个人总结:据官网介绍,osrm是可以作为一个lib与c++无缝结合的,这个有待研究,如果真这样的化,就完成摒弃了B/S架构这种模式,像osgEarth就无缝结合了。总体管局graphhoper的官网要比osrm写的详细的多,osrm运行性能要比它高,osrm可以脱离docker直接编译在win上。

个人demo下载地址:https://pan.baidu.com/s/1qQhVgsDe9zubLNjUyKZIVw 。

以上是关于Gis地图离线路由规划服务搭建的主要内容,如果未能解决你的问题,请参考以下文章

gis地图的铁路线路怎么画上的

在局域网中搭建自己的gis服务器

osm 搭建离线地图_搭建开源地图服务 - 利用OSMGIS和iD

百度开源地图服务器搭建

离线地图发布服务器搭建

geoserver离线地图服务搭建和图层发布