本文将参考文件:http://www.movable-type.co.uk/scripts/latlong-vincenty.html 当中的计算公式和java代码用MATLAB语言实现,然后进行了实际计算。将结果与一个名称为gpscalc工具的计算结果进行对比,结果一致。该方法计算两种情况:

1.已知两点经纬度表示,计算两点间距离以及方位角(近似两点连线的航向角);
2. 已知一个基准点,另一个点距离基准点的距离和初始方位角,计算另一个点的经纬坐标。

%                   @
%                  @@@
%                 @@@@@
%                @@@@@@@
%               @@@@ @@@@
%              @@@@   @@@@
%             @@@@     @@@@
%            @@@@      @@@@@
%           @@@@@@@@@@@@@@@@@
%          @@@@@@@@@@@@@@@@@@@
%         @@@@             @@@@
%        @@@@               @@@@
%       @@@@                 @@@@
%      @@@@                   @@@@% Algorithm Studio
% Author : CloudWalker
% Date: 2020-08-10
% Email:jordan2333@aliyun.com
% Function: Example1-根据p1和p2经纬度估算两点的距离和方位角(p1 → p2)。
%           Example2-根据p1以及航向和距离,计算终点p2的位置以及方位角。
% Reference: http://www.movable-type.co.uk/scripts/latlong-vincenty.htmldigitsOld = digits(10);
%% Example 1
% lon1 = deg2rad(104.628601) ; lat1 = deg2rad(29.380394);  %p1
% lon2 = deg2rad(104.622673); lat2 = deg2rad(29.371966);   %p2
lon1 = deg2rad(104.628601) ; lat1 = deg2rad(29.380394);  %p1
lon2 = deg2rad(104.628602); lat2 = deg2rad(29.380394);   %p2
f = 1 /  298.257223563;
a= 6378137.0;
b= 6356752.314245;L = lon2 - lon1;
tanU1 = (1-f)*tan(lat1); cosU1 = 1 / sqrt((1 + tanU1*tanU1));sinU1 = tanU1 * cosU1;
tanU2 = (1-f)*tan(lat2); cosU2 = 1 / sqrt((1 + tanU2*tanU2));sinU2 = tanU2 * cosU2;
lambda = L;
lambda_ = 0;
iterationLimit = 100;
while (abs(lambda - lambda_) > 1e-12 && iterationLimit>0)iterationLimit = iterationLimit -1;sinlambda = sin(lambda);coslambda = cos(lambda);sinSq_delta = (cosU2*sinlambda) * (cosU2*sinlambda) + (cosU1*sinU2-sinU1*cosU2* coslambda) * (cosU1*sinU2-sinU1*cosU2* coslambda);sin_delta = sqrt(sinSq_delta);if sin_delta==0 return endcos_delta = sinU1*sinU2 + cosU1*cosU2*coslambda;delta = atan2(sin_delta, cos_delta);sin_alpha = cosU1 * cosU2 * sinlambda / sin_delta;cosSq_alpha = 1 - sin_alpha*sin_alpha;cos2_deltaM = cos_delta - 2*sinU1*sinU2/cosSq_alpha;C = f/16*cosSq_alpha*(4+f*(4-3*cosSq_alpha));lambda_ = lambda;lambda = L + (1-C) * f * sin_alpha * (delta + C*sin_delta*(cos2_deltaM+C*cos_delta*(-1+2*cos2_deltaM*cos2_deltaM)));
end
uSq = cosSq_alpha * (a*a - b*b) / (b*b);
A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));
B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq)));
delta_delta = B*sin_delta*(cos2_deltaM+B/4*(cos_delta*(-1+2*cos2_deltaM*cos2_deltaM)-B/6*cos2_deltaM*(-3+4*sin_delta*sin_delta)*(-3+4*cos2_deltaM*cos2_deltaM)));
s = b*A*(delta-delta_delta);
fwdAz = atan2(cosU2*sinlambda,  cosU1*sinU2-sinU1*cosU2*coslambda); %初始方位角
revAz = atan2(cosU1*sinlambda, -sinU1*cosU2+cosU1*sinU2*coslambda); %最终方位角%% Example2
lon1 = deg2rad(104.628601) ; lat1 = deg2rad(29.380394);  %p1
alpha_1 = deg2rad(fwdAz * 180 / pi + 360); %  方向角
s = s; %距离sin_alpha1 = sin(alpha_1);
cos_alpha1 = cos(alpha_1);tanU1 = (1-f) * tan(lat1); cosU1 = 1 / sqrt((1 + tanU1*tanU1)); sinU1 = tanU1 * cosU1;
delta_1 = atan2(tanU1, cos_alpha1);
sin_alpha = cosU1 * sin_alpha1;
cosSq_alpha = 1 - sin_alpha*sin_alpha;
uSq = cosSq_alpha * (a*a - b*b) / (b*b);
A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));
B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq)));delta = s / (b*A);
dleta_ = 0;
while abs(delta-dleta_) > 1e-12cos2deltaM = cos(2*delta_1 + delta);sin_delta = sin(delta);cos_delta = cos(delta);delta_delta = B*sin_delta*(cos2deltaM+B/4*(cos_delta*(-1+2*cos2deltaM*cos2deltaM)-B/6*cos2deltaM*(-3+4*sin_delta*sin_delta)*(-3+4*cos2deltaM*cos2deltaM)));dleta_ = delta;delta = s / (b*A) + delta_delta;
endtmp = sinU1*sin_delta - cosU1*cos_delta*cos_alpha1;
lat2 = atan2(sinU1*cos_delta + cosU1*sin_delta*cos_alpha1, (1-f)*sqrt(sin_alpha*sin_alpha + tmp*tmp)); %目标点纬度
lon =  atan2(sin_delta*sin_alpha1, cosU1*cos_delta - sinU1*sin_delta*cos_alpha1);
C = f/16*cosSq_alpha*(4+f*(4-3*cosSq_alpha));
L = lon - (1-C) * f * sin_alpha *(delta + C*sin_delta*(cos2deltaM+C*cos_delta*(-1+2*cos2deltaM*cos2deltaM)));
lon2 =roundn(rem((lon1+L+3*pi) ,(2*pi)) - pi, -6);  %normalise to -180...+180 目标点精度revAz = atan2(sin_alpha, -tmp); %最终方位角

已知两点经纬度 计算距离和方位角(MATLAB实现)相关推荐

  1. matlab 计算大圆距离,已知两点经纬度计算两点之间的大圆距离

    Const r As Double = 6378137 '地球半径常量 Const PI As Double = 3.1415926 '圆周率常量 Private Type LatLog lat As ...

  2. 关于已知两点经纬度求球面最短距离的公式推导

    已知两点经纬度计算球面距离的公式,一搜一大堆,形式如下: 可是至于这个公式为什么是这样的,今天推导了一下,详细推导过程如下.首先画个图(图1),要不然空间想象能力差的话容易犯糊涂.首先对图1做个大致的 ...

  3. 已知两点经纬度求球面最短距离的公式推导过程(几何法加向量法)

    已知两点经纬度计算球面距离的公式,一搜一大堆,形式如下: 可是至于这个公式为什么是这样的,今天推导了一下,详细推导过程如下.首先画个图(图1),要不然空间想象能力差的话容易犯糊涂.首先对图1做个大致的 ...

  4. 已知两点经纬度坐标(大地坐标)计算方位角

    已知两点经纬度的情况下,如果是将经纬度转为投影坐标,则计算量大并且存在子午线收敛角误差,同理,先将经纬度转为空间直角,再计算方位角也不可取,以下是一个简化计算的近似算法,可供参考. double dp ...

  5. 两点间距离公式计算机,已知两点经纬度,用excel计算两点距离的公式?(转

    已知两点经纬度,用excel计算两点距离的公式?(转 (2008-08-03 17:51:26) 标签: 杂谈 用EXCEL进行高斯投影换算 从经纬度BL换算到高斯平面直角坐标XY(高斯投影正算),或 ...

  6. 根据两点经纬度计算距离

    根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的 假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等 ...

  7. js计算点到已知两点的直线距离(面积法/海伦公式)

    问题 已知两点(x1, y1) 和 (x2, y2),求某点(x, y) 到两点确定的直线的距离 代码 通过海伦公式+三角形面积公式求高,即点到已知两点距离 function getPointToLi ...

  8. C++ —— (两个经纬度计算距离、方位角)、(经纬度A+距离+方位,计算目标经纬度)、(多个经纬度计算面积)

      顺看 编码不易,觉得文章好,请给作者点赞关注.一键三连.谢谢!       * 计算两经纬度之间的距离.方位角 * 已知A经纬度.根据距离.方位,计算目标经纬度            测试了三组数 ...

  9. 已知一点经纬度和距离,计算另一点的经纬度

    因为有需求,在知道一点经纬度和距离的情况下,需要知道另一点的经纬度. 之前在网上也有查找,也有不少的案例,但是多数都是语焉不详,看不太明白.后来自己整理和重新再思考了下,这里给出一个自认为说得还算比较 ...

最新文章

  1. SAP RETAIL 特征参数文件(Characteristic Profile) III
  2. .net中下载文件的方法(转)
  3. SqlCommand类,在与数据库交互式一定要用到的属性
  4. 划线价格怎么弄java_京东可以设置划线价格吗?怎么设置?
  5. Android 在 NDK 层使用 OpenSSL 进行 RSA 加密
  6. LeetCode 268. 缺失数字
  7. 光模块价格由带宽还是距离决定_5G光模块市场:行“提量降本”之道 走“技术深耕”之途...
  8. Vue学习笔记之07-v-for循环遍历
  9. 三天两夜肝完这篇万字长文,终于拿下了 TCP/IP
  10. 《我的成功可以复制》读后感这一、两天可以静下心来,将唐骏先生写的《我...
  11. 【旅行青蛙】你的蛙到底在干什么?
  12. 笔记本电脑电流声(滋啦滋啦声)解决方案
  13. 宁海中考政策计算机考试合格,宁海中考指南!同学们、家长们你们准备好了吗?...
  14. 四川贝利思科技:拼多多开店的优势所在
  15. 垃圾回收之G1收集过程
  16. 基于JAVAEE的洗衣店费用管理系统
  17. 计算机网络与多媒体试卷,《计算机网络与多媒体技术》试卷
  18. Docker启动Elastic Search报错 ERROR: [1] bootstrap checks failed
  19. python用pip安装numpy完整命令_Python--Numpy安装
  20. r调用python任何模块_RStudio不通过rPython加载所有Python模块

热门文章

  1. 【华为机考刷题】2022_6_14
  2. lv蒙田包二手价格_盘点 | LV家保值性最高,最值得入手的五款包包
  3. Qiime2+Origin绘制稀释曲线
  4. 面试时如何考察应聘者的素质?
  5. 巡逻机器人(Patrol Robot, Uva1600)
  6. UVA - 1600 Patrol Robot (巡逻机器人)(bfs)
  7. 微博直播场景下,如何实现百万并发的答题互动系统
  8. 软件工程师的试炼之地:53道Python面试问答
  9. 最新版继续教育学习软件下载地址
  10. 帕金森病的功能性脑连接障碍:一项5年的纵向研究