路由规划——运输距离的估算

news2025/4/3 22:10:44

运输距离的估算

  • 1. 常规的拟合距离
    • 1.1 欧氏距离
    • 1. 2 球面距离拟合
  • 2. 一种改进的球面距离拟合
  • 参考文献

在进行路径规划时,需要获取点与点之间的距离,点之间的距离通常是通过坐标或者经纬度计算得到,可分为拟合距离和导航距离两类。导航距离顾名思义,是根据经纬度通过调用API获取,拟合距离一般是通过欧氏距离或球面距离乘以距离系数得到。

1. 常规的拟合距离

实际场景一般是大规模的(如包裹揽派可能会涉及成千上万个点),需要计算的数据量过大,而导航距离一般需要通过API获取,API的导航距离查询服务一般有查询额度限制,大量地址对的导航距离的查询非常耗时,且成本昂贵。如何能够快速高效的获取运输距离便成了一个亟待解决的问题。在大部分时候,如在点之间距离近、业务精度要求不高的时候,可以采用距离拟合的方式来计算点之间的距离。

1.1 欧氏距离

若点的位置由直角坐标系的坐标 ( x , y ) (x,y) (x,y)表示,那么点之间的距离则为欧氏距离:
d i j = ( x i − x j ) 2 + ( y i − y j ) 2 d_{ij} = \sqrt{(x_i-x_j)^2+(y_i-y_j)^2} dij=(xixj)2+(yiyj)2

1. 2 球面距离拟合

由于地球可看作一个球体,假设地球半径为 R R R(6378.137km),那么可以计算得到点之间的球面距离,并乘以一个距离系数 k k k,得到拟合的运输距离:
r a d L a t i = l a t i ∗ π 180 , r a d L a t j = l a t j ∗ π 180 d i f f 1 = r a d L a t i − r a d L a t j d i f f 2 = l o n i ∗ π 180 − l o n j ∗ π 180 d i j = k ∗ 2 R ∗ a r c s i n s i n 2 ( d i f f 1 2 ) + c o s ( r a d L a t i ) c o s ( r a d L a t j ) s i n 2 ( d i f f 2 2 ) radLat_i= \frac{lat_i * \pi}{180},radLat_j=\frac{lat_j*\pi}{180} \\diff_1 = radLat_i-radLat_j \\diff_2 = \frac{lon_i * \pi}{180}-\frac{lon_j*\pi}{180} \\d_{ij} = k*2R*arcsin\sqrt{sin^2(\frac{diff_1}{2})+cos(radLat_i)cos(radLat_j)sin^2(\frac{diff_2}{2})} radLati=180latiπ,radLatj=180latjπdiff1=radLatiradLatjdiff2=180loniπ180lonjπdij=k2Rarcsinsin2(2diff1)+cos(radLati)cos(radLatj)sin2(2diff2)
一般而言,由于不同的规划场景道路状况不同,距离系数 k k k会根据规划的场景变化。

2. 一种改进的球面距离拟合

在业务中,若点之间距离过远,或涉及到需要落地的场景,常规的拟合运输距离可能会存在误差过大的情况。而考虑到导航距离获取的难度,为了进一步提升球面距离的拟合精度,Radu等人[1]提出了一种新的运输距离拟合的方法。
首先从需要规划的点中进行采样出 n n n个点,计算这 n n n个点之间的导航距离和球面这里,然后可以得到点与点之间的距离系数 k i , j k_{i,j} ki,j。在计算其他节点之间 ( A , B ) (A,B) (A,B)的距离时,首先通过球面距离,找到分别离这两个节点最近的采样点 N N ( A ) NN(A) NN(A) N N ( B ) NN(B) NN(B),采用最近采样点之间的距离系数 k N N ( A ) N N ( B ) k_{NN(A)NN(B)} kNN(A)NN(B)作为节点 ( A , B ) (A,B) (A,B)之间的距离系数,然后计算节点 ( A , B ) (A,B) (A,B)之间的拟合运输距离。

图1 采样点示例(左图橘色为实际运输距离,蓝色为球面距离;
右图为计算得到的点之间的距离系数)

图1 采样点示例(左图橘色为实际运输距离,蓝色为球面距离; 右图为计算得到的点之间的距离系数)

图2 非采样点之间的运输距离拟合

图2 非采样点之间的运输距离拟合
该方法的准确性取决于两个因素:图的大小和节点的位置。 增加采样节点的数量会减少到节点的平均距离,从而提高距离估计的准确性。 但是,大图需要更多内存并且会减慢该方法的速度。 注:这种方法在平原会更有效,如果规划城市为像重庆这种的魔幻3D城市,那么这种方法并不适用。

参考文献

[1] Radu Mariescu-Istodor and Pasi Fr.nti. 2021. Fast travel-distance estimation using overhead graph. Journal of Location Based Services (2021), 1-19.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础二叉树及其高频面试题

目录 一、树的概念及其结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示法 二、二叉树的概念及其结构 2.1 概念 2.2 特殊二叉树 2.3 二叉树的性质 2.4 二叉树的存储结构 顺序存储 链式存储 三、链式二叉树 3.1 遍历方式 深度优先遍历:DFS 层序遍历:BFS(广度优先…

【附源码】Python计算机毕业设计社区防疫信息管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Debian11中 Nginx1.22.1 php8.1.12 Mariadb10.5.15的安装

起因:我之前发的关于LEMP的搭建的文章,已经有3年9个月了,各个软件的版本更新了比较多。最主要的是,CentOS系统终止了,我也完全更换到了Debian系统之上。这里重新搭建了一下,主要是计划结合frp,构…

Vue | Vue.js 全家桶 Pinia状态管理

🖥️ Vue .js专栏:Node.js Vue.js 全家桶 Pinia状态管理 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀…

[基础服务] [操作系统] 类Linux的文件和目录

🍁简介 在奔腾70年代的中美建交之际,UNIX 也逐渐展露头角(也有说是60年代末),十五年后Windows诞生了,又过了五年Linux横空出世三大主流操作系统直到现在呈现三足鼎立之势~ 出生时间是: UNIX(70年代初) > Windows(80年代中) > Linux (90年代初) 可以…

基于微信小程序的电影院票务系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Mav…

HCIP-Datacom OSPF进阶(二)最常用的路由协议 OSPF各种LSA作用详解

目录 OSPF路由计算: LSA头部信息: Router-LSA(1类): 一类LSA: 一类LSA可以描述四种链路类型: Network-LSA(2类): 二类: IR、ABR、ASBR是什…

【HTML实战】把专属于她的爱心代码放在自己的网站上是一种什么体验?

一、 写在前面的话 看多了李洵的炫酷爱心,今天来点不一样的爱心代码。需要李洵的炫酷爱心代码请看我的上一篇文章。 最近随着电视剧《点燃我温暖你》的火热播出,剧中帅气学霸李洵的炫酷爱心代码也迅速火出了圈,作为一个喜欢动手实践的我来说…

力扣206 - 反转链表【校招面试高频考题】

乾坤大挪移~一、题目描述二、思路分析1、头插2、三指针迭代三、整体代码展示【需要自取】1、头插2、三指针迭代四、总结与提炼一、题目描述 原题传送门 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入&#xf…

【Redis】CentOs 虚拟机安装 Redis 缓存数据库

一、使用案例: 以淘宝为例,几个人一起登入淘宝,去检索男装,这几个人的访问都得到相同的结果。这时,我们就可以考虑将男装缓存在一个地方,而不是再去访问数据库,这时,就是我们 Redis…

ctfshow文件包含

web78 源码&#xff1a; if(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__);//高亮显示当前文件内容 }解法一 - php://input # http://challenge.ctf.show/?filephp://input # [POST DATA] <?php system(ls)?> <?php…

基于可视图法(VG)的路径规划算法简述

可视图法路径规划&#xff08;VG&#xff09; 可视图法由Lozano-Perez和Wesley于1979年在论文&#xff1a;《An Algorithm for Planning Collision-Free Paths among Polyhedral Obstacles.》中提出。 基于可视图法路径规划算法主要包括以下两个步骤&#xff1a;①可视图的构建…

第二章 环境的选择和安装

1、开发环境操作系统 1.1 选择Windows、Mac or Linux 首先明确一点&#xff1a;我们的首要目的是要快速上手使用Elasticsearch&#xff08;以下简称ES&#xff09;&#xff0c;安装和部署ES并非重点&#xff0c;企业中真正需要你去安装的可能性或者机会非常小。大家可以想一想…

C++运算符重载

运算符重载运算符重载一、重载‘’运算符1.非成员函数版本重载2.成员函数版本二、重载关系运算符三、重载左移运算符四、重载下标运算符五、重载赋值运算符六、重载new和delete1.重载2.内存池七、重载括号运算符八、重载一元运算符运算符重载 C将运算符重载扩展到自定义的数据…

23 张图细讲使用 Devtron 简化 K8S 中应用开发

23 张图细讲使用 Devtron 简化 K8S 中应用开发 在本文中&#xff0c;您将学习如何在多集群环境中使用 Devtron 在 K8S 上进行应用开发。 https://devtron.ai/ Devtron 附带用于构建、部署和管理微服务的工具。它通过提供直观的 UI 和 Helm 图表支持来简化 K8S 上的部署。今天&a…

Java数据结构 | 模拟实现优先级队列

目录 一、前言 二、堆模拟实现优先级队列 2.1 堆的概念 2.2 堆的性质 2.3 堆的存储方式 2.4 堆的创建 一、前言 在前面我们学习过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队…

mybatis-plus代码生成工具

mybatis-plus版本升级尝试遇到的问题 若遇到高版本&#xff1a;【全局覆盖已有文件的配置已失效&#xff0c;已迁移到策略配置中】or【覆盖已有文件&#xff08;已迁移到策略配置中&#xff0c;3.5.4版本会删除此方法&#xff09;】这句话&#xff0c;可参考文章中解决办法 参考…

python机器人编程——基于单目视觉、固定场景下的自动泊车(下)

目录一、前言二、主要思路step0 设定一个中间位置step1 掉转马头step2 直线匀速前进step3 调整姿态step4 视觉匹配三、效果四、全篇总结一、前言 本篇来讨论一下在固定场景下&#xff0c;如何仅通过单目视觉&#xff0c;实现差速小车的自动停靠&#xff0c;这种方式实现成本比…

_cpp 位图

文章目录1. 位图概念1.1 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。2. 位图的实现2.1 运行结果&#xff1a;3. 位图应用3.1 具体代码封装实现如下3.2 部分结果演示&#xff1a;3.3 应用总结&#x…

力扣(LeetCode)791. 自定义字符串排序(C++)

排序 这道题只关心 orderorderorder 出现的字符&#xff0c;在 sss 中的排序。 sss 中不在 orderorderorder 的字符&#xff0c;在排序后是什么位置&#xff0c;不影响答案。 可以用 sortsortsort 函数&#xff0c;传入我们自定义的排序方式&#xff0c;按照 orderorderorder …