首先在这里声明,本次使用的地球模型采用的是球形。参考的文章是美团的距离计算,说的很清晰,感兴趣的朋友可以参考。我自己使用了MATLAB实现了其中的算法。仅供参考,互相学习。

大致地说,这里实现的方法就是通过将经纬坐标转换为三维的以球心为原点的立体坐标计算地球表面两点之间的距离长度。

地理空间距离计算优化—美团技术团队

function [x y z] = LL2era(lon,lat)
%函数实现将经纬度坐标转换为以地心为原点的三维立体坐标
%lon:输入精度
%lat:输入纬度
%模型采用地球为球形
lat = lat*pi/180;
lon = lon*pi/180;
r = 6367000; %地球的半径
x = r*cos(lat)*cos(lon);
y = r*cos(lat)*sin(lon);
z = r*sin(lat);function [distance1,distance2] = distance_compute(lon1,lat1,lon2,lat2)
%根据给出的两点之间的经纬度计算地球上两点之间的距离
%计算两点之间的距离
%对于地球球体来说,计算地球表面两点之间的距离就是求这两点相对地心形成的夹角对应的弧度
%那么为了求得这个弧度的长度,我们需要得到夹角的大小,再使用余弦公式得到弧度对应的边
%最后根据弧度计算公式获得距离
r = 6367000; %地球的半径
[x1 y1 z1] = LL2era(lon1,lat1);
[x2 y2 z2] = LL2era(lon2,lat2);
distance_direcr2 = (x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2; %弧长对应的弦长
costheta = (distance_direcr2 - 2*r^2)/(-2*r^2); %夹角的余弦值
distance1 = r*acos(costheta); %半径乘以角度等于弧长%改进1,为了加快计算的速度,将arccostheta用sintheta代替,再用sqrt(1-costheta^2)变换
distance2 = r*sqrt((1  - costheta^2));%同时,下面将给出更加一般化的简化函数
function distance = abstract_compute(lon1,lat1,lon2,lat2)
%以一种简化的方式计算距离
%由于计算的距离比较小,所以可将经纬线认为是互相垂直的
%于是就可以根据垂直、直线之间的关系来求解
r = 6367000; %地球的半径
dx = (lon1 - lon2)*pi/180; %经度差并转换为弧度
dy = (lat1 - lat2)*pi/180; %纬度差并转换为弧度
average = ((lat1 + lat2)/2)*pi/180; %平均纬度
SN = r*dy; %南北方向上的距离
SE = r*dx*cos(average); %东西方向上的距离
distance = sqrt(SN^2 + SE^2);

输入输出示例:


最后一步的简化就是将余弦函数用泰勒公式展开表示,只要展开到三次幂就可以得到误差比较小的结果了!

利用MATLAB实现空间两点距离的计算以及优化相关推荐

  1. 利用matlab求点到直线距离和垂足坐标(开源,易使用修改)

    利用matlab求点C到向量AB的垂直距离以及垂足E点坐标 A.B两点构成向量AB:C为任一点.求C点到向量AB的垂直距离与C点到AB的垂足坐标. 结果说明:C2ABJvLi--C点到向量AB的垂直距 ...

  2. 利用matlab做一个不定二重积分的计算

    计算如下不定二重积分 实验程序:syms x y f=(x*exp(-x*y))//进行二次简单的不定积分,分别进行计算,计算二次就好了c=int(f,'x')int(c,'y')实验结果: y=ds ...

  3. Unity两点距离的计算

    Vector3 P1 = new Vector3(1,1,1);Vector3 P2 = new Vector3(2,2,2);print((P1-P2).magnitude); 转载 https:/ ...

  4. 利用MATLAB求解积分

    在高等数学中,我们经常需要进行积分计算操作,积分在高等数学中占用比较重要的作用,在MATLAB中主要提供了int函数用于对于符号进行求积分的操作. 目录 积分的定义 int函数的调用方式 利用MATL ...

  5. 利用matlab程序分别设计一正弦型信号_【电力电子】【2013.06】【含源码】永磁同步电动机三相逆变器的设计...

    本文为芬兰赫尔辛基应用科学大学(作者:Lars Dautermann)的学士论文,共63页. 本论文的目的是为方程式大赛学生(Formula Student)的电动汽车提供一个三相逆变器.设计逆变器是 ...

  6. 线性规划问题的数学建模matlab,数学建模讲座之三——利用Matlab求解线性规划问题(linprog函数).ppt...

    数学建模讲座之三--利用Matlab求解线性规划问题(linprog函数) 利用Matlab求解线性规划问题 线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP ...

  7. 二维静电场有限元matlab,利用MATLAB计算电磁场有关分布

    <利用MATLAB计算电磁场有关分布>由会员分享,可在线阅读,更多相关<利用MATLAB计算电磁场有关分布(17页珍藏版)>请在人人文库网上搜索. 1.电磁场实验报告实验一 模 ...

  8. matlab磁场计算公式,利用MATLAB计算电磁场有关分布.doc

    利用MATLAB计算电磁场有关分布 电磁场实验报告 实验一 模拟电偶极子的电场和等位线 学院:电气工程及其自动化 班级: 学号: 姓名: 实验目的:了解并掌握MATLAB软件,熟练运用MATLAB语言 ...

  9. 利用matlab实现复数域空间牛顿迭代法的分形图案展示(newton法)

    利用matlab实现复数域空间牛顿迭代法的分形图案展示(newton法) 1 一维函数的牛顿迭代法 2 复平面的牛顿迭代法 2.1 简单方程结果 2.2 其它非线性方程结果 本文首发于 matlab爱 ...

最新文章

  1. Unity3D 简单的倒计时
  2. c++ 该使用类内初始值么?
  3. python写一个表白程序_520最实用的Python表白程序
  4. Java面试题:单例设计模式、适配器模式的不同方式
  5. windows中端口号被占用的解决方法
  6. android检查可用网络的代码
  7. Asp.net MVC4 下二级联动
  8. oracle10g连接自动断开,报ORA-03135错误
  9. python 最优化算法库,python实现各种最优化算法,
  10. .rgb格式文件的Python读取、格式转换
  11. 关于在PLSQL中实现DEBUG调试功能的方法
  12. 如何在 JavaScript 中使用SpreadJS导入和导出 Excel 文件
  13. 阿里云视频点播一站式解决解决方案怎么样?
  14. matlab 小游戏 找不同的颜色
  15. C++| 匠心之作 从0到1入门学编程【视频+课件+笔记+源码】
  16. html显示hdf5文件,图片转换成HDF5文件(加载,保存)
  17. js获取当前时间的前一天/后一天 ,前一月/后一月
  18. 润乾报表 多数据源配置报错:数据源无数据库连接,且未设定数据连接工厂
  19. cc2540 cc2541 开发板资料更新日志
  20. 基于51单片机火灾监测自动灭火装置Proteus仿真

热门文章

  1. MySQLdb._exceptions.OperationalError: (1045, “Access denied for user ‘root‘@‘localhost‘ (using passw
  2. Fiddler配合夜神模拟器进行抓包
  3. MySQL下执行*.sql文件
  4. Eclipse如何导入jar包
  5. 南宁西乡塘区的计算机中专学校,南宁市西乡塘区中专学校
  6. BoundsChecker的用法
  7. 请问什么叫纹波?怎样测量纹波?
  8. 微机原理与接口技术 | 一、微型计算机系统
  9. 什么是虚拟机?Mac电脑怎么使用虚拟机安装双系统?
  10. MYSQL-mysql中的truncate的用法