高德地图路线规划-获取校车行驶的最优路线算法

【数据结构与算法】智能寻路算法,《高德地图》的那些年。。。。。。 序 繁花落尽,留下谁的足迹,珍藏于谁的记忆。 嗨,这里还是狐狸~~ 大家都用过或者都知道《百度地图》、《高德地图》这些APP吧,用的最多的莫过于其中的导航功能了,它可以帮你快速有效的找到你所需要的一条路径,用的时候十分的方便,那大家有想过其中的原理是什么吗,别人可以不知道,但程序员必须懂的——智能寻路算法,今天我就来分享有关智能寻路算法的知识。 广度搜索算法 当然啦,智能寻路算法也有很多种,我们挑其中的一种方式来详细讲解,那就是广度搜索算法。 广度优先搜索(也称宽度优先搜索,缩写BFS,. 阅读详情

最近在做校车行驶路线规划的开发任务,为了获取一个最优的路线,我把所有站点可能组成的路线罗列出来,然后计算这些组合出来的路线的总路程,最后比较获取总路程最短的一个即为最终的最优路线

需要注意的地方:
1.各站点距离最好是计算前临时获取,这样能保证获取到实时的路线,因为城市建设会导致路线变化
2.每次规划,最多只能规划18个站点(起始站点+16个途径站点+终点站点)
3.高德API每天请求距离测量的接口是有次数限制的,需要登录控制台查看
4.假设存在A、B、C四个站点,需要获取A->B、B->A 、A->C、C->A、B->C、C->B所有站点之间的距离,获取次数为总站点数n*(n-1)

两站点间距离的bean

@Data
public class SiteDistance {
    private Long startId;	//开始站点Id
    private Long endId;		//结束站点Id
    private Double distance;//站点间距离
}

以下为获取校车行驶的最优路径的算法

/**
 * @Description siteIds的List第一个元素必须是学校站点,siteDistances的List应该包含各个点对所有的其他点的距离
 * @Param
 * @return
 * @Date 2019/2/25 9:48
 **/
public Map<String, Object> getBestRoute(List<Long> siteIds,  List<SiteDistance> siteDistances){
    //将距离数据,以"startId-endId"为key,distance为value保存在map中
    Map<String, Double> distanceMap = new HashMap<>();
    for (SiteDistance siteDistance: siteDistances) {
        distanceMap.put(siteDistance.getStartId()+"-"+siteDistance.getEndId(), siteDistance.getDistance());
    }
    //获取各站点可能组成的所有路径
    List<List<Long>> idCombine = new ArrayList<>();
    perm(siteIds, 1,siteIds.size()-1, idCombine);
    //获取总路程最短的一个组合
    return getMinDistanceRoute(idCombine, distanceMap);
}

/**
 * @Description  获取最短总路程的路径
 * @Date 2019/2/25 8:46
 **/
public Map<String, Object> getMinDistanceRoute(List<List<Long>> idCombine, Map<String, Double> distanceMap){
    Map<String, Object> result = new HashMap<>();
    Double minTotal = null;//最短路程
    int minIndex = 0;//最短索引
    for (int i=0;i<idCombine.size();i++) {
        //将起始站点加到最后作为结束站点
        List<Long> routeSites = new ArrayList<>();
        routeSites.addAll(idCombine.get(i));
        routeSites.add(routeSites.get(0));
        //获取一条路线的总路程
        Double totalDistance = getTotalDistance(routeSites, distanceMap);
        if(null == minTotal || totalDistance < minTotal){
            minTotal = totalDistance;//保存最短的路线路程
            minIndex = i;//保存最短路线的索引
        }
    }
    //将起始站点加到最后作为结束站点
    List<Long> routeSites = new ArrayList<>();
    routeSites.addAll(idCombine.get(minIndex));
    routeSites.add(routeSites.get(0));
    result.put("routeSites", routeSites);
    result.put("totalDistance", minTotal);
    return result;
}

//获取一条路线的总路程
public double getTotalDistance(List<Long> routeSites, Map<String, Double> distanceMap){
    Double totalDistance = 0d;
    for(int i = 1;i<routeSites.size();i++){
        //从map中查询两站点之间的距离
        totalDistance += distanceMap.get(routeSites.get(i-1) + "-" + routeSites.get(i));
    }
    return totalDistance;
}



/*
 * 对数组arr进行全排列
 * 全排列的范围:begin -> end
 */
public static void perm(List<Long> list,int begin,int end, List<List<Long>> result){
    //设置递归的出口,即当需要全排列的范围只有一个元素,则全排结束,此数组为全排列
    if(begin==end){
        result.add(list);
        List<Long> arr = new ArrayList<>();
        for(int i=0;i<=end;i++){
            arr.add(list.get(i));
            //System.out.print(list.get(i) + " ");
        }
        //System.out.println();
        result.add(arr);
        return;
    }else{
        //for循环将begin -> end中的每一个数放到begin位置中去,并实现全排列
        for(int j=begin;j<=end;j++){
            swap(list,begin,j);  //for循环将begin -> end中的每一个数放到begin位置中去
            perm(list,begin+1,end, result); //假设begin位置确定,那么对begin+1 -> end中的数组进行全排列
            swap(list,begin,j); //换过去后再将数组还原
        }
    }
}
public static void swap(List<Long> list,int i,int j){
    Long temp=list.get(i);
    list.set(i, list.get(j));
    list.set(j, temp);
}
基于Dijkstra算法的景点路径规划(高德api) 这是网络优化课程最后的课程报告,利用Dijkstra算法对已知节点进行最短路径规划。 开发环境: ubuntu16 python3.6——pyqt5、opencv-pyhton、urllib、requests 首先,进入高德地图开放平台,创建应用。选用的是高德地图开发平台的web服务API,可使用的服务如图一,而本文 需要静态地图API进行地图图片的显示、搜索服务-关键字查询进行地点坐标(经纬度)的查询、行驶距离测量进行两地点驾车距离的运算。 然后进行计算图的Dijkstra算法应用,最后进行可视化。增 阅读详情

相关推荐

地图信息,障碍判断以及寻路算法(A星算法,B星算法和蚁群算法等)

A星不会像广度优先遍历那样探索所有的步骤,而是选择每一步中最优的方块。 这样就可以大大提高效率了。

任鸟飞2217777779的博客 6093

高德地图路径规划2.0的算法是什么,如何用代码实现

高德地图路径规划2.0的算法是使用Dijkstra算法进行最短路径规划的。Dijkstra算法是一种贪心算法,它能够在有向图中求出单源最短路径。它的基本思想是,对于一个起点,求出到所有点的最短路径。 在代码中实现Dijkstra算法,需要先建立一张邻接矩阵,表示图中所有边的权值。然后,初始化一个数组dis,用来记录每个点到起点的距离。接着,从起点开始遍历整张图,每次求出一个最近的点,并更新它到其他...

weixin_35756690的博客 4690

高德地图API——路径规划问题

1.搜索高德开放平台并登录2.依次点击应用管理-我的应用-创建新应用(这里随便输)-添加key(服务平台选择web服务)3.创建完成后会生成一个key值,后面要用4.代码实现。

2301_80339607的博客 3252

高德地图之路线规划 多点路线规划路线最短原则之二 TSP算法

经过这段时间的使用和研究,我发现点和点之间的最短路线并不是最优的。针对所有点的组合可能, 得到的最短路线才是最好的(也就是TSP方法),然后再结合点对点之间的距离进行比较,得到的才是相对最优方案。 举例:A、B、C、D四个点。自由组合,得到最短路线方案。 所有的组合路线应该是(此处我们只需要四个点的组合) ABCD ABDC ACBD ACDB ADCB ADBC BACD BADC BCAD B...

Nade的博客 1万+

基于高德地图的行程规划-蚁群算法

蚁群算法代码:蚂蚁类:public class Ant implements Cloneable { public int[] m_nPath = new int[PublicFun.N_CITY_COUNT];// 蚂蚁走过的路径 public double m_dbPathLength;// 蚂蚁走过的路径长度 public int[] m_nAllowedCity = new in...

a460708485的博客 1万+

多车辆路径规划问题的混合遗传算法求解(MATLAB)

路径规划是在有限资源和约束条件下确定车辆或机器人行驶路径的过程。在多车辆路径规划问题中,我们需要找到一组最优路径,以使多个车辆能够有效地完成各自的任务,并满足各种限制条件。混合遗传算法是一种强大的优化算法,可以用于解决这类问题。本文将介绍如何使用MATLAB实现基于混合遗传算法的多车辆路径规划。多车辆路径规划问题的混合遗传算法求解(MATLAB)

2301_79331328的博客 404

高德开放平台——实时路径规划优化指南

高德开放平台是中国领先的地图服务平台,提供包括地图展示、导航、路径规划、交通信息等一系列服务的开放API。借助高德的地图服务,开发者可以实现实时位置追踪、路径规划、物流调度等多种应用。要使用高德开放平台的API,需要先前往高德开放平台注册账号并申请开发者Key。驾车路径规划接口步行路径规划接口骑行路径规划接口公交路径规划接口每个接口都可以根据用户需求提供不同的路线选择,包括最短时间、最短距离、避开收费路段等。params = {'origin': origin, # 起点经纬度。

2301_80374809的博客 7987

多目标跟踪中使用trackeval评估dancetrack运行结果

trackeval使用

qq_46144849的博客 1783

【路径规划】动态交通环境下的辅助驾驶决策方法强化学习算法研究附Matlab代码

本文给出了一种面向动态交通环境的辅助驾驶决策方法,能够基于动态车流信息给出路线规划方案。为了实现这一点,本方案以各个路口为节点,将道路简化为离散化网格图;基于状态对环境进行了离散化建模,使计算机得以模拟动态交通环境;通过道路长宽,其他车辆数目的因素建模计算各节点之间的行驶代价,构建车辆运行规则。在上述建模基础上,方案使用 A*和强化学习两种决策算法分别实现了实时路线规划。关键词:动态交通环境;辅助驾驶;A*;Q-Learning;决策方法0 引言。

qq_59747472的博客 1157

CLion for Mac(m1)配置GCC编译器

条件:电脑已经下载过XCode 一. 下载HomeBrew homebrew是一款macos,linux下的包管理工具,我们需要使用他来下载GCC 下载方法: 1.打开终端(terminal) 2.输入 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ps.有可能会遇到的问题 我当初下载挂了VPN,优快云上还有很多解决问题的方法,可以将错误信

supermario19的博客 7847

从3dB定向耦合器到双圆极化天线:在HFSS里玩转相位差90°的馈电艺术

本文详细介绍了在HFSS中设计3dB定向耦合器与双圆极化天线的关键技术,重点解析了90°相位差生成原理及馈电网络设计。通过HFSS仿真工具,实现从定向耦合器到完整天线系统的集成,优化阵列天线性能,适用于卫星通信和雷达系统。

weixin_33717117的博客 556

【交通路网】基于强化学习方法寻找动态交通路网环境中的最优驾驶策略附Matlab代码和论文

本文给出了一种面向动态交通环境的辅助驾驶决策方法,能够基于动态车流信息给出路线规划方案。为了实现这一点,本方案以各个路口为节点,将道路简化为离散化网格图;基于状态对环境进行了离散化建模,使计算机得以模拟动态交通环境;通过道路长宽,其他车辆数目的因素建模计算各节点之间的行驶代价,构建车辆运行规则。在上述建模基础上,方案使用 A*和强化学习两种决策算法分别实现了实时路线规划。智能交通系统(Intelligent Transportation System,ITS)旨在构建更加安全,舒适,稳定的交通环境;

qq_59747472的博客 1001

芯片硅前验证技术与驱动工程师实战指南

硅前验证是芯片开发流程中的关键环节,通过pre-silicon simulation等技术手段在流片前验证设计正确性。其核心技术包括软件仿真、FPGA原型验证和硬件仿真器解决方案,涉及Linux驱动开发、芯片架构理解和波形分析等核心技能。作为连接芯片设计与系统集成的桥梁,硅前验证能早期发现设计缺陷,节省数百万美元流片成本。以Cadence Palladium为代表的硬件仿真器,通过专用服务器系统实现比纯软件方案快100-1000倍的仿真速度,为驱动工程师提供完整的外设模型验证环境。掌握硅前验证技术可显著提升

weixin_42522857的博客 324

微信小程序的校园导航与信息服务系统 校车 课表 失物招领 活动通知

校园导航提供校内地图服务,支持建筑物定位、路径规划及3D实景导航。用户可查询教学楼、图书馆、食堂等位置,并获取最优路线。校车服务实时显示校车运行路线、到站时间及班次信息。支持预约提醒功能,用户可设置常用线路,接收车辆动态通知。课表查询同步教务系统数据,展示个人课程安排。支持周/月视图切换,附带教室定位、教师联系方式及课程资料上传功能。失物招领分类发布丢失或拾获物品信息,包含照片上传、地点标记及联系方式。集成AI图像识别,可通过关键词或物品特征快速检索。活动通知。

QQ_188083800的博客 414

lumerical中DEVICE和MODE模块的交互使用(真的很干货!!可以自信的说网上绝对找不到比我更详细的步骤了)

几个脚本文件很重要! Lumerical仿真流程: 一、DEVICE: (1).建模并且运行完之后,在脚本提示符下键入以下脚本行以运行plotDopingProfile.lsf如图1(文件名如果索引不到的话就可以把文件直接用notepad++打开,然后把代码直接输入到device中script脚本中 如图2)脚本文件并生成下图 如图3: (图2) (图1) (图3) (2).仿真...

1万+

RTOS任务调度原理:高优先级任务为何在低优先级任务执行时无法响应

实时操作系统(RTOS)的核心在于其确定性的任务调度机制,它通过优先级抢占确保关键任务及时执行。其基本原理是调度器仅在特定调度点(如任务主动阻塞、中断退出时)运行,比较就绪态任务的优先级并切换上下文。这一机制的技术价值在于为嵌入式系统提供可预测的响应时间,广泛应用于工业控制、汽车电子和物联网设备等对实时性要求高的场景。当低优先级任务执行**长时间非阻塞运算**且无中断发生时,调度器无法被触发,导致高优先级任务虽处于就绪态却无法获得CPU,造成系统响应延迟。理解**任务状态机**与调度点,是优化实时性、避免此

weixin_33508411的博客 287
上一篇: 高德API 点击地图弹出信息窗体显示经纬度坐标以及地址
下一篇: Git 使用码云的远程仓库管理项目代码
ldtkCoder
博客等级 码龄10年 15粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值