java版路径规划


文章目录

  • java版路径规划
  • 前言
  • 一、路径规划服务是什么?
  • 二、GraphHopper是什么?
    • 1.GraphHopper介绍
    • 2.GraphHopper 结合java使用
      • 1.将GraphHopper-web 单独部署 调用其API接口服务(简单不推荐)
      • 2.通过pom形式引入maven,使用其核心库(推荐,高度可定制)

前言

在生活中我们经常使用百度地图高德地图得导航功能,其中它的路线规划是怎么实现得呢?下面我们研究一下吧!

本文基于java语言结合开源引擎GraphHopper实现


一、路径规划服务是什么?

路线规划是导航的前提,根据目的地、出发地以及路径策略设置,为用户量身设计出行方案。同时可结合实时交通,帮助用户绕开拥堵路段,提供更贴心、更人性化的出行体验。

路径规划是运动规划的主要研究内容之一。运动规划由路径规划和轨迹规划组成,连接起点位置和终点位置的序列点或曲线称之为路径,构成路径的策略称之为路径规划。
路径规划在很多领域都具有广泛的应用。在高新科技领域的应用有:机器人的自主无碰行动;无人机的避障突防飞行;巡航导弹躲避雷达搜索、防反弹袭击、完成突防爆破任务等。在日常生活领域的应用有:GPS导航;基于GIS系统的道路规划;城市道路网规划导航等。在决策管理领域的应用有:物流管理中的车辆问题(VRP)及类似的资源管理资源配置问题。通信技术领域的路由问题等。凡是可拓扑为点线网络的规划问题基本上都可以采用路径规划的方法解决。

二、GraphHopper是什么?

1.GraphHopper介绍

GraphHopper 是一个快速且开源的道路路由引擎。

优点:

速度快,内存效率高
适用于 OpenStreetMap 数据
由于 Apache 许可证,业务友好
从大型服务器扩展到移动设备
在 Java™ 中实现
适用于安卓和树莓派
有一个大的测试套件
高度可定制

官网
http://graphhopper.com/

GITHUB地址:
https://github.com/graphhopper/graphhopper

支持数据格式:
目前GraphHopper 默认使用得是osm的数据,可以从OpenStreetMap下载数据,支持osm和osm.pbf文件,同时也可以基于postgresql+postgis或者shp文件进行数据管理

2.GraphHopper 结合java使用

目前有两种使用方式:

1.将GraphHopper-web 单独部署 调用其API接口服务(简单不推荐)

源码文件夹里找出搭载web离线路径规划服务所需要的jar包、config.yml配置文件、以及下载好的osm数据。


OpenStreetMap 地图数据 (china-latest.osm.pbf和china-latest-free.shp)
China:https://download.geofabrik.de/asia/china.html
各省osm数据下载:http://download.openstreetmap.fr/extracts/asia/china/

随后在此文件夹进入cmd,输入启动命令即可开启web服务,命令如下:
java -Xmx2g -Xms2g -Dgraphhopper.datareader.file=beijing2.osm -jar graphhopper-web-0.12-SNAPSHOT.jar server config.yml

开启服务后即可进行离线路径规划服务,请求地址为:
http://localhost:8989/route?point=40.042997,116.300074&point=40.0458666,116.1656608&type=json&locale=zh-CN&vehicle=car&weighting=fastest&points_encoded=false
也可将web服务部署在服务器,只需修改配置文件中的ip地址,就可以让别人也能访问你所部属的路径规划服务。

路径规划返回的Json字段的具体含义可以参考GraphHopper官网对api的定义,地址:https://graphhopper.com/api/1/docs/routing/

2.通过pom形式引入maven,使用其核心库(推荐,高度可定制)

引入相关maven

<dependency><groupId>com.graphhopper</groupId><artifactId>graphhopper-core</artifactId><version>[LATEST-VERSION]</version>
</dependency>

OpenStreetMap 地图数据 (china-latest.osm.pbf和china-latest-free.shp)
China:https://download.geofabrik.de/asia/china.html
各省osm数据下载:http://download.openstreetmap.fr/extracts/asia/china/
数据这里暂时使用osm数据 shp数据和postgis数据后期在进行讲解(数据下载可从上方地址下载然后通过osmconvert64.exe工具进行处理转换成osm)

进行数据文件初始化

@Configuration
public class InitRouteConfig {private static final Logger logger = LoggerFactory.getLogger(InitJDBCConnectionConfig.class);@Resourceprivate SystemConfigMapper systemConfigMapper;@Beanpublic GraphHopper initConnection() {logger.info("-------开始初始化路径规划服务数据!-----------");GraphHopper hopper = new GraphHopper();// OSM 文件路径List<SystemConfig> systemConfigList = systemConfigMapper.selectByExample(new SystemConfigExample());if (systemConfigList.size() > 0) {String routeFilePath = "当前路径规划数据文件的存放文件夹";File fileT = new File(routeFilePath + File.separator + "route.osm");if (fileT.exists()) {hopper.setOSMFile(routeFilePath + File.separator + "route.osm");// 读取完OSM数据之后会构建路线图,此处配置图的存储路径hopper.setGraphHopperLocation(routeFilePath);// 目前免费包仅支持car、bike、foot三种交通方式的导航List<Profile> profiles = new ArrayList<>();// 目前提供三种出行方式 驾车 骑行 步行 优先返回最快路线 不考虑经济成本profiles.add(new Profile("car").setVehicle("car").setWeighting("fastest").setTurnCosts(false));profiles.add(new Profile("bike").setVehicle("bike").setWeighting("fastest").setTurnCosts(false));profiles.add(new Profile("foot").setVehicle("foot").setWeighting("fastest").setTurnCosts(false));hopper.setProfiles(profiles);// 开启速度模式
//        hopper.getCHPreparationHandler().setCHProfiles(new CHProfile("car"));// 导入过程可能需要几分钟,加载可能需要几秒钟,取决于导入的区域数据大小hopper.importOrLoad();logger.info("-------初始化路径规划服务数据完成!-----------");} else {logger.info("-------初始化路径规划服务数据失败!未检查到route.osm文件-----------");}}else{logger.info("-------初始化路径规划服务数据失败!请检查系统配置临时文件存放路径是否正确!-----------");}return hopper;}}

应用代码

public static void routing(GraphHopper hopper) {// 配置一个简单的请求GHRequest req = new GHRequest(42.508552, 1.532936, 42.507508, 1.528773).// 注意,即使只有这样一个配置文件,我们也必须指定要使用的配置文件setProfile("car").// 定义转弯指令的语言setLocale(Locale.CHINA);// 设置返回最多备用路线3条req.getHints().putObject(Parameters.Algorithms.AltRoute.MAX_PATHS, 3);// 设置无法通行区域req.putHint(Parameters.Routing.BLOCK_AREA, "纬度,经度,纬度,经度");GHResponse rsp = hopper.route(req);// 报错处理if (rsp.hasErrors())throw new RuntimeException(rsp.getErrors().toString());// 使用最佳路径,请参阅GHResponse类以了解更多可能性。ResponsePath path = rsp.getBest();// 全路径的点、距离(米)和时间(毫秒)PointList pointList = path.getPoints();double distance = path.getDistance();long timeInMs = path.getTime();Translation tr = hopper.getTranslationMap().getWithFallBack(Locale.UK);InstructionList il = path.getInstructions();// 迭代所有turn指令for (Instruction instruction : il) {// System.out.println("distance " + instruction.getDistance() + " for instruction: " + instruction.getTurnDescription(tr));}assert il.size() == 6;assert Helper.round(path.getDistance(), -2) == 900;}

路径规划服务基于java实现相关推荐

  1. 【路径规划】基于matlab AI抗疫服务移动机器人路径规划系统【含Matlab源码 2096期】

    ⛄一.简介 [路径规划]基于matlab AI抗疫服务移动机器人路径规划系统[含Matlab源码 2096期] ⛄二.部分源代码 clear all close all %Set up field f ...

  2. 【APF三维路径规划】基于matlab人工势场算法无人机三维路径规划【含Matlab源码 168期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab人工势场算法无人机三维 ...

  3. 【RRT三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 155期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab RRT算法无人机三维 ...

  4. 【A_star二维路径规划】基于matlab A_star算法无人机二维路径规划(起终点障碍物可设置)【含Matlab源码 1321期】

    ⛄一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[A_star二维路径规划]基于matlab A_s ...

  5. 【A_star三维路径规划】基于matlab A_star算法无人机三维路径规划【含Matlab源码 446期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[三维路径规划]基于matlab A_star算法无人机三维路径规划[含Matlab源码 446期] 获取代码方式2: 付费专栏Matla ...

  6. 【RRT三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 1363期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab RRT算法无人机三维 ...

  7. 【RRT三维路径规划】基于matlab RRT_Star算法三维路径规划【含Matlab源码 1571期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[三维路径规划]基于matlab RRT_Star算法三维路径规划[含Matlab源码 1571期] 点击上面蓝色字体,直接付费下载,即可. ...

  8. 【BFS三维路径规划】基于matlab广度优先搜索算法无人机三维路径规划【含Matlab源码 270期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab广度优先搜索算法无人机 ...

  9. 【路径规划】基于matlab DWA算法机器人局部避障路径规划【含Matlab源码 890期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[路径规划]基于matlab DWA算法机器人局部避障路径规划[含Matlab源码 890期] 获取代码方式2: 通过订阅紫极神光博客付费 ...

最新文章

  1. python输入输出流详解_输入输出流的概念
  2. 【总结整理】数据可视化
  3. winform 界面设计
  4. win11什么时候发布的_2021年初级会计师考试大纲什么时候发布?
  5. 面试题 (斐波那契数列,复杂度为线性)
  6. daemon进程(转)
  7. 29.3 用户模式构造
  8. 最火的编程语言和开源项目,跟你想的一样吗?
  9. windows批量ping脚本
  10. 乱OL, Ran OL[Ran2_Online]加解密工具源码
  11. CentOS7 安装svn
  12. xps转jpeg图片
  13. keil错误和解决办法(1):FCARM - Output Name not specified, please check ‘Options for Target - Utilities’
  14. 20个超炫的HTML5 /CSS3免费网页设计模板
  15. Snagit_日文输入法:促音,长音,小写的输入方法
  16. YOLOv5 5.0版本检测FPS
  17. 硅谷码农35岁危机:Java之父也找不到工作
  18. 干货!对抗深度强化学习策略的训练和理论保障
  19. kinectfusion解析_2019/02/09 对于KinectFusion 的理解
  20. 现在才发现:敏捷迭代的好处实在太多了

热门文章

  1. STM32CubeIDE开发(三十二), stm32人工智能开发应用实践(Cube.AI).篇二
  2. ES7 ES8 ES9 ES10 新特性总结思考
  3. 使用Python下载电影
  4. 水经注离线三维地球触摸GIS系统
  5. json 转 csv python
  6. 【OFDM通信】基于matlab OFDM通信系统仿真【含Matlab源码 2521期】
  7. Vue安装过程及环境配置
  8. 黑鱼资源完整模板分享 已本地化CSS JS
  9. 开源一个极简的群日程工具
  10. [机器学习入门] 李弘毅机器学习笔记-7 (Brief Introduction of Deep Learning;深度学习简介)