热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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:\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模式了。

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

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

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

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


推荐阅读
  • 从零开始编译Linux系统:第16章 全新起点
    本章将详细介绍如何从零开始编译一套完整的Linux系统,涵盖关键组件如glibc库的介绍及其重要性。通过本文,读者将了解从源代码构建Linux系统的全过程。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • 本文介绍了一种使用CSS3和jQuery实现的35款SVG图标加载动画。这些动画不仅视觉效果出色,还能提升用户体验。通过本文,您可以了解如何在项目中应用这些动画。 ... [详细]
  • 本文介绍了如何使用Postman构建和发送HTTP请求,包括四个主要部分:方法(Method)、URL、头部(Headers)和主体(Body)。特别强调了Body部分的重要性,并详细说明了不同类型的请求体。 ... [详细]
  • 第七卷《英才》强调,即使有良药,若不对症,效果也不如低等药物;即使有贤才,若不适用,效果也不如普通人。文中通过多个比喻,阐述了人才使用的重要性,指出合适的人才在适当的时间和场合才能发挥最大效用。 ... [详细]
  • 年前,我发表了一篇文章,分享了自己通过在线教育平台学习IT技能的经历。文中详细探讨了在线教育与传统线下教育在技能培训方面的优缺点。许多网友在讨论在线教育时,常常提到“在线教育是否缺乏学习氛围”的问题。本文将对此进行深入分析。 ... [详细]
  • JavaSE For循环入门示例
    本文将介绍Java中For循环的基本概念和使用方法,通过几个简单的示例帮助初学者更好地理解和掌握For循环。 ... [详细]
  • 本文介绍了如何在 Qt 应用程序中实现状态栏、浮动窗口(铆接部件)和中心部件。通过简单的代码示例,详细解释了每个组件的创建和设置方法。 ... [详细]
  • 如何解决TS1219:实验性装饰器功能可能在未来版本中更改的问题
    本文介绍了两种方法来解决TS1219错误:通过VSCode设置启用实验性装饰器,或在项目根目录下创建配置文件(jsconfig.json或tsconfig.json)。 ... [详细]
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • 经过一年的思考,我发现自己对开发的兴趣并不浓厚,而对算法研究则更加热衷。本文将探讨开发与算法之间的本质差异,并分享我的未来学习计划。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • Bootstrap 缩略图展示示例
    本文将展示如何使用 Bootstrap 实现缩略图效果,并提供详细的代码示例。 ... [详细]
  • 本文介绍了一种支付平台异步风控系统的架构模型,旨在为开发类似系统的工程师提供参考。 ... [详细]
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
author-avatar
王柱柱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有