以node / link文件表征的道路网络-----dijkstra算法yyds-----基于南京公路公开数据做路径规划(上)

导航路径规划之一 路网模型 考虑到路网作为网络的特殊性以及路线优化问题的要求,符合导航需要的路网表达方法和存储结构应满足如下要求:1.        存储量小2.        便于路线优化算法对其进行操作3.        充分考虑路网作为网络的特殊性-大型稀稀疏网络4.        能充分表达路网的要素和拓扑结构5.        能表达单项交通、交叉口转向限制等交通管制措施6.        能表达路网的各种特殊结构... 阅读详情

前文已经基于公开数据,获得了南京的全域高速公路的路网数据,这些以node / link文件表征的道路网络不仅延续了osm地图中所包含的经纬度、名称、容量等信息 ,还包含了一个重要的道路等级字段 “link_type_name”。

交通部门一般以高速公路、国省干道、城市道路、乡道农路作为区分,进行交通执法及管理。作为在高速公路领域混饭吃的,本系列计划以南京高速公路路网(也就是下图)为例,展示路径规划的一种思路。
南京高速路网图(不全凑合看)

对于交通使用者来说,如何从起点去往终点,有多种备选的路径。如果使用node / link表征的道路网络,那么提供给用户的就是类似于“187 - 666 - 1765 -4567 ”这样的一串node编号,告诉从点187出发的用户应该去666号点位,再到1765号点位,最后就能到终点4567了。对应的, 187点到666点之间也必须有路,而且不需要经过额外的点,这就是完成这次出行所需走过的路段,在link文件里也会找到对应的路段编号、长度等信息。

因为城市道路足够复杂,所以会出现如下图的情况:
在这里插入图片描述
狗窝去猫窝有两条路,
其中一条是直达的,9km
另一条要从麦当劳和火锅店经过,反而只需要“2+3+1”,6km。
这说明:
①存在有效的link,不代表这就是link起终点间的最短路线;
②必须规定,在表征路径时,node编号串就与link直接对应,才能避免出现差错;
③只有搜索了所有的可能,才能确定最短路是哪一条。

**

如何在路网中,提供起终点,找到两点之间的最短路径呢?

dijkstra算法是绕不过去的一座大山

在这里插入图片描述

求“带权有向图的最短路径问题”一般可分为两类:
一是单源最短路径,即求图中某一个顶点到其它顶点的最短路径,可以通过经典的 Dijkstra(迪杰斯特拉)算法求解;

二是求每对顶点间的最短路径,可通过Floyd(弗洛伊德)算法来求解,这个我也会,但是本文主要是在指定起终点的路径规划层面玩耍,所以不讲了。

Dijkstra算法的目的是寻找单起点最短路径,其策略是贪心加非负加权队列。

Dijkstra算法步骤如下:

它按照距离起点的远近顺序,逐步确定到各个顶点的最短路径。具体来说,算法首先找到距离起点最近的顶点,并确定它们之间的最短路径;然后,它接着寻找下一个最近的顶点,依此类推。在第 i 次迭代之前,算法已经确定了到达最近的 i − 1 个顶点的最短路径,这些顶点及其路径构成了原图的一个子图,形成一棵以起点为根的树(这也是做最短路的副产品)。

由于图中所有边的权重都为非负,算法能够保证每次迭代找到的是当前可达顶点中距离起点最近的一个。这些待选顶点,称为“边缘顶点”,位于已构建的子树的外围,也就是距离“确定的树”一步之遥的顶点。其他顶点与树中顶点要想发生关联,还得经过额外的顶点。这是我们就暂时把它们的连接权重假设为无限大,意思是,他们可能重演前面的“猫窝狗窝现象”,所以暂不考虑。

为了求出下一个最接近起点的顶点,Dijkstra算法计算每个边缘顶点至其最近的树内顶点的距离(即该边的权重),并将此距离与从起点到该树内顶点的已知最短路径长度相加。在所有这些候选顶点中,算法选择总和最小的顶点作为下一个最近顶点。

Dijkstra算法的核心在于,通过仅对这些特定的候选路径进行比较,就可以有效地找到最短路径。

为了简化算法的实施过程,我们为每个顶点引入两个辅助标记。

第一个标记是一个数值标记 d ,它记录了从算法开始到当前为止,从起点到该顶点的最短路径长度。随着算法的进行,当新的顶点被加入到树中时,d 的值更新为从起点到这个新顶点的最短路径长度。

第二个标记则记录了该路径上的倒数第二个顶点,即当前构建的树中该顶点的父节点(对于起点以及那些尚未与树中的顶点直接相连的顶点,这个标记不必指定)。

有了这两个标记后,寻找下一个最近顶点 u * 变得相对直接:
仅需在所有边缘顶点中找到具有最小 d 值的顶点即可,而这个查找过程的顺序并不重要。这样,这两个标记极大地简化了算法的步骤,使得确定最短路径的过程更加高效和直观。

![(https://i-blog.csdnimg.cn/direct/9af00895de9f4c91bf9e967f94c3c83c.png)

比如上图,我要找从a点出发去e点的最短路:
第一步,一开始所谓的“确定的树”上只有a点,b点、d点是“候选备胎”,a-b距离是3,a-d距离是7,所以果断选a-b往下探索,

b(a,3)表示,如果要回溯,b点的前一个点是a点,距离是3

对b点来说,“候选备胎”是c点、d点,b点去d点距离更近,所以:

d(b,5)来了,d点到a点的最短路长度是5 ,经过b点,比直接a点到d点的7更近。

此时,a点的“确定的树”上有a、b、d三个成员了
还剩下c点、e点

c点、e点到“确定的树”距离相等,但是c点“巴结的”是b点,距离起点更近,所以c点先来,最后e点。

此时,从a点出发,所有的点都被纳入了“确定的树”上了。

也就是说,现在我们获得了路网上每一个点到a点的最短路径,当然也就包括了我们想要的那个终点到a点的最短路径。

e(d,9)说明,a点到e点的最短距离是9
路线是e - d - b -a

最短路的常用算法,万变不离其宗,对于复杂路网来说,我们只是会试图用一些小方法来缩短求解时间,或者去除一些不必要的计算,但是基本原理几乎也就这样了。

基于以上的原理和数据,我测试了利用dijkstra算法在南京实际高速公路路网中搜索最短路的算法,请移步下一篇
在这里插入图片描述

海思Hi3061M MCU:为高速吹风筒市场注入智能动力 此外,海思还提供了丰富的软件开发工具和生态环境组件,帮助开发者快速实现复杂功能。高速吹风筒因其高效的风力和快速的干燥效果,近年来在市场上越来越受欢迎。然而,传统的高速吹风筒在性能、噪音和使用寿命等方面仍有改进的空间。凭借其高性能、低功耗、低噪声和易用的开发工具,为高速吹风筒市场带来了全新的解决方案。这不仅提高了用户的使用体验,还延长了电机的使用寿命。这不仅减少了电机的电磁噪声,还提高了电机的运行效率。还支持风机顺逆风启动适配多种电阻范围的电机,进一步提高了吹风筒的适用性和灵活性。 阅读详情

相关推荐

从‘数字分身’到‘数字员工’:华为云MetaStudio如何重塑企业生产力?

本文探讨了华为云MetaStudio如何通过数字人技术重塑企业生产力,从数字分身到数字员工的转变。通过多模态AIGC技术,MetaStudio在金融、零售和制造业等多个行业实现高效应用,显著提升服务质量和运营效率。数字员工不仅降低成本,更成为企业增长的新引擎。

weixin_29083475的博客 450

道路最短路径问题、道路最优路径问题解决方案

最短路径问题,最优路径问题

u010346525的博客 1548

别再手动调参了!用MATLAB+改进PSO算法,5步搞定机械臂轨迹优化(附完整代码)

本文介绍如何利用MATLAB和改进PSO算法快速优化机械臂轨迹规划,仅需5步即可完成传统耗时的手动调参过程。通过混沌初始化、自适应权重等创新方法,改进PSO算法显著提升优化效率,实现全局最优解搜索,适用于工业自动化中的机械臂控制。文章包含完整MATLAB代码实现,帮助工程师轻松应用于实际生产场景。

weixin_29232121的博客 357

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

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

2301_80374809的博客 7989

Arduino应用——PWM控制直流电机风扇

Arduino应用——PWM控制直流电机风扇PWM原理实验器件功能描述如何改变文本的样式插入链接与图片实现代码生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 最近在使用arduino UNO开发板完成课程小作业。其中一个要求设计一个电风扇控制系统,要求能够通过PWM调节风扇的转速。期间搜索了许多例程和方法,但受限于器件,效果不

hypecycle的博客 2万+

电源完整性之Cadence Sigrity Power DC_IR_Drop仿真

之前和大家分享过电源完整性之仿真设计原理链接: link.今天接着上一篇文章总结一下电源直流压降的的仿真操作流程及一些simulation中的设置参数,用到的时候Cadence Sigrity 中的Power DC组件,下面开始享受仿真的快乐吧: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的Power DC组件,然后先择licence,最后就可以打开我们之前转化好的.SPD文件。操作如下图: 2.设置层叠信息和过孔焊盘参数 层叠信息:每层的介质厚度、材料、介电常数、介质损耗角等,如

刘小同学的博客 1万+

路网与路径规划

路网与路径规划 设计: svg矢量图 路网 路径算法 路径规划 路网: var mapData = { mapInfo: { color: "blue", lineWidth: "2", path: "M0,500L2000,500L2000,1500L0,1500Z", navPathPoints: [], nodes: [ { index: 0, value: "a", r: 20, x: "715", y: "1000" },

weixin_43813389的博客 1253

D类功放LC滤波器实战:从Q值0.707到EMI优化的完整设计流程

本文详细解析了D类功放LC滤波器的完整设计流程,从确定截止频率与Q值0.707的理论基础出发,到参数计算、仿真验证及关键元器件选型,并提供了应对EMI超标和过流保护等实际问题的进阶调试策略。文章强调,精准的LC滤波器设计是平衡音质、稳定性与电磁兼容性的关键,尤其需关注电感饱和电流与电容直流偏置等细节。

e4f5g6h7的博客 1036

C#二次开发(二)之基于Dotspatial的路网数据路径规划

由于项目提出的要求是基于点、线组成的路网,提取出指定起点、终点的路径,同时也需要提取出途经的点。首先是加载数据,利用的是自带的AddLayers函数,相对于AddLayer来说差别是能够一次性加载多个数据。

m0_51950734的博客 785

innovus:sroute 双层follow pin的做法

根据std cellpower pin的层次可以分成两种情况。

m0_61544122的博客 2732

msfvenom制作windows/linux/android/ios木马

msfvenom选项如下 -p, --payload<payload> 指定 payload(攻击荷载)。如果使用自定义payload,请使用'-'或者stdin指定。 -l, --list [module_typel列出指定模块的所有可用资源。模块类型包括:payloads, encoders, nops, all -n, --nopsled <length>为payload预先指定一个NOP滑动长度。 -f, --format <format>指定输出格式(使

Cwillchris的博客 2734

数据融合工具(6)线要素网络连通性分组计算

线要素几何连通性分组检查工具,从线要素节点之间的联系出发,按节点之间的纽带关系,找出一张张网络数据。

craybb的博客 1686

Python 爬虫实战:豆瓣 / IMDB 电影数据抓取(评分 + 剧情 + 演员阵容结构化处理)

在数据为王的时代,电影数据是进行市场分析、推荐系统构建和学术研究的重要资源。豆瓣和 IMDB 作为国内外最具影响力的电影评分和资讯网站,包含了海量高质量的电影数据。本文将带领你从零开始,构建一个健壮的 Python 爬虫,用于抓取豆瓣和 IMDB 的电影信息,并将其中的非结构化数据(如剧情简介、演员列表)进行清洗和结构化处理,最终存储到便于分析的结构化文件(如 CSV)中。

yansideyucsdn的博客 956

以node / link文件表征的道路网络-----dijkstra算法yyds-----基于南京公路公开数据做路径规划(中)------Python实现

你在shǒu shén mà?

吃饱了写的博客 345

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

以node / link文件表征的道路网络-----dijkstra算法yyds-----基于南京公路公开数据做路径规划(依然是中)------Python实现的注意事项

葱油拌面,我大吃特吃!

吃饱了写的博客 326

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

自动驾驶软件工程之全局规划

自动驾驶技术作为现代交通领域的革新力量,其软件工程中的全局规划环节扮演着至关重要的角色。本博客将深入剖析自动驾驶全局规划的核心原理与实现方法,包括道路网络建模、路径搜索算法、决策制定策略等关键内容。通过全面阐述全局规划在自动驾驶中的作用,以及探讨其面临的挑战与未来发展趋势,本文旨在为自动驾驶软件工程的研发提供有益的参考和思路,推动自动驾驶技术的进一步发展与应用。全局路径规划算法属于静态规划算法,根据已有的地图信息(SLAM)为基础进行路径规划,寻找一条从起点到目标点的最优路径。

人无远虑,必有近忧 1450

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【路径规划】基于dijkstra 算法实现图像地图最短路径求解附matlab代码

对任意图,选择合适的数据结构表示图,在此基础上实现求解最短路径的Dijkstra算法。对所设计的图的数据结构,提供必要的基本功能。建立图的表示模块,顶点的插入和删除操作模块;在建立图之后从单源点开始求最短路径并显示。实现的功能有建立有向图,排除和增加目的地,方便找出最短路径,在建立好的有向图中,显示出来从顶点到各个顶点的最短路径。​Dijkstra算法的基本思路是:假设每个点都有一对标号(dj, pj),其中dj是从起源点s到点j的最短路径的长度(从顶点到其本身的最短路径是零路(没有弧的路),其长度等于零)

matlab_dingdang的博客 790

导航中道路模型概念

道路是导航引擎及地图中基本概念。 目前在导航引擎中,道路是线性的,大部分的道路宽度的属性还没有,道路纯粹是线性模型。而目前的导航系统基本是以线段模型来拟合道路。 即两个端点及之间的线段。 而整个地图中道路的拓扑结构都是由这些线段构成,线段之间的交点就是shape point,这些点也可以看做是道路的分割点。 在接下来新一代导航系统中,道路模型增加了一个新的参数:曲率,这样使道路的拟合更平滑,

viewcode的专栏 1万+

以node / link文件表征的道路网络-----基于南京公路公开数据做路径规划(下)------dijkstra算法的一些简单花样

东北饺子要配卤猪蹄和凉拌土豆丝

吃饱了写的博客 327

node 安装路径_node.js环境配置

官网:https://nodejs.org/en/ 下载node.js版本我下载的是左边这个版本,最多人使用的版本。右边的是最新版本。下载完了就直接双击安装,安装过程中可以另外指定安装路径,我的安装路径是D:node.js打开终端窗口,输入以下指令,检验node和npm是否安装成功了。node -v npm -vnpm的安装,由于新版的nodejs已经集成了npm,所以之前安装node的时候np...

weixin_27134495的博客 1213

asdasdasd

transit.search(new BMap.Point(result.sx,result.sy), new BMap.Point(data.d.endx,data.d.endy)); nodejsserver/service/onendjourney.js下 var rd = {}; db.execute("select startx,starty from (select * fr

拥有梦想的技术青年的专栏 576

基于OpenStreetMap地图数据的离线路径规划

距离上次写博客已经好久了,这段时间断断续续也有弄一下关于OpenStreetMap的东西,这次把离线路径规划的实现记录一下。 在OpenStreetMap提供的开源项目中,osmbonuspack提供了一些在线路径规划的借口,可以通过向在线发送起始点信息的方式来获取服务器回调的规划路径,主要的方式有以下三种: GraphHopper MapQuest OSMR 具体的请看这里 其中Gr

manmantj的博客 1万+

导航路径规划之三 路网数据的组织

    路网数据的组织如下图1-1所示。将一个图符的节点、关联路段信息存入在一起,将全国的图符编译进一个文件,这样的好处是在路径规划时可以减少磁盘I/O的次数,从而提高规划的速度。图1-1 数据的组织形式...

autonavi2012的博客 2943

Dijkstra算法实现--铁路网出行规划

铁路交通网的最短路径 在有向图表示的铁路网中,利用Dijkstra算法,求出从指定的起点城市到终点城市的最短路径,并输出。 #include<stdio.h> #include<stdlib.h> #include<string.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #def...

PilotJohnWu的博客 2339

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 297

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 308
上一篇: 以node / link文件表征的道路网络 ---- -如何在QGIS里直接增删外源导入的地理要素(点、线)并导出(续) -- 一些力大砖飞的笨环节 -- LOOKUP工具与excel骚操作
下一篇: 以node / link文件表征的道路网络-----dijkstra算法yyds-----基于南京公路公开数据做路径规划(中)------Python实现
一顿四个菜
博客等级 码龄6年 202粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值