Vincenty逆算法的matlab代码实现

  • JOHNCLOCK
    了解作者
  • matlab
    开发工具
  • 1.1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 5 积分
    下载积分
  • 0
    下载次数
  • 2022-10-07 21:02
    上传日期
高精度VincentyInverse算法,通过两点WGS-84的GPS经纬度坐标计算两点间方位距离
vincentyInverse.m.zip
  • vincentyInverse.m
    2.4KB
内容介绍
function s = vincentyInverse(lat1, lon1, lat2, lon2) a = 6378137.0; f = 1/298.257223563; b = a*(1-f); % [2.22044604925031e-16] % 37°57′03.72030″S, 144°25′29.52440″E % lat1 = deg2rad(37+57/60+3.7203/3600); % lon1 = deg2rad(144+25/60+29.5244/3600); % lat1 = deg2rad(50); % lon1 = deg2rad(5); % lon1 = deg2rad(121+16.60397/60); % lat1 = deg2rad(38+48.59580/60); % 37°39′10.15610″S, 143°55′35.38390″E % lat2 = deg2rad(37+39/60+10.1561/3600); % lon2 = deg2rad(143+55/60+35.3839/3600); % lat2 = deg2rad(58); % lon2 = deg2rad(3); % lon2 = deg2rad(121+16.60363/60); % lat2 = deg2rad(38+48.59511/60); 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; % antipodal = abs(L) > pi/2 || abs(lat2-lat1) > pi/2; lambda = L; % sinlambda = nan; % coslambda = nan; % % if antipodal == 1 % sigma = pi; % else % sigma = 0; % end % % sinsigma = 0; % if antipodal == 1 % cossigma = -1; % else % cossigma = 1; % end % sinSqs = nan; % cos2sm = 1; % sinalpha = nan; % cosSqs = 1; % C = nan; lambdad = 10000; iter = 0; cosSqa = 0; sinsigma = 0; cossigma = 0; cos2sm = 0; sigma = 0; while (abs(lambda - lambdad) > 1e-12 && iter < 2000) sinlambda = sin(lambda); coslambda = cos(lambda); sinSqs = (cosU2*sinlambda) * (cosU2*sinlambda) + (cosU1*sinU2-sinU1*cosU2*coslambda) * (cosU1*sinU2-sinU1*cosU2*coslambda); if (abs(sinSqs) < eps) break; end sinsigma = sqrt(sinSqs); cossigma = sinU1*sinU2 + cosU1*cosU2*coslambda; sigma = atan2(sinsigma, cossigma); sinalpha = cosU1 * cosU2 * sinlambda / sinsigma; cosSqa = 1 - sinalpha*sinalpha; if cosSqa ~= 0 cos2sm = cossigma - 2*sinU1*sinU2/cosSqa; else cos2sm = 0; end C = f/16*cosSqa*(4+f*(4-3*cosSqa)); lambdad = lambda; lambda = L + (1-C) * f * sinalpha * (sigma + C*sinsigma*(cos2sm+C*cossigma*(-1+2*cos2sm*cos2sm))); iter = iter + 1; end uSq = cosSqa * (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))); Ds = B*sinsigma*(cos2sm+B/4*(cossigma*(-1+2*cos2sm*cos2sm)- ... B/6*cos2sm*(-3+4*sinsigma*sinsigma)*(-3+4*cos2sm*cos2sm))); s = b*A*(sigma-Ds); % s = length of the geodesic
评论
    相关推荐
    • YGSM.zip
      通过理论分析和实验, 论述了全自主足球机器人异构双目视觉协调导航的合理性和有效性,给出了 测量目标相对坐标的模型,分析了基于双目协调的足球机器人导航数据融合方法,提出了双目协调导航模型 及基于行为的目标...
    • radarinboat.rar
      介绍船用导航雷达的发展现状及其使用的新技术
    • JORunal-Reports.zip
      一个在导航界大牛写的一个报告,值得大家,特别是惯性导航的人员下载
    • 直接vincenty算法的matlab代码-经纬度方位距离推算
      使用Vincenty高精度算法,根据现在点经纬度和相对点的方位距离,推算相对点的经纬度,是导航领域的常见问题。
    • gps 模拟信号
      载入航迹时可选过滤掉点数少或距离小的段。 可选与PC版OziExplorer交互运行。通过Ozi API,在Ozi中双击地图上的某点, Virace就立即跳跃至该点(自由驾驶模式),或跳至离该点最近的航迹(航迹 重播模式);单击...
    • ZFHaversine:Haversine公式的Objective-C实现,用于查找两个GPS坐标之间的距离
      Haversine公式是在导航中很重要的方程式,它可以根据其经度和纬度给出球体上两个点之间的大圆距离。 这是球面三角法中更通用的公式的特例,该公式具有正弦曲线的定律,关系到球面三角形的边和角。 ( ) 余弦球定律...
    • Geo-Utilities:CoreLocation 的一些通用实用程序
      CLLocation 上的此类别添加了进行距离计算的方法,以及确定从 A 到 B 的方向(方位)的计算。这些方法基于上的信息 。 这是对 Chris Veness 所做工作的改编(Attribution 3.0 Unported (CC BY 3.0)): 纬度/经度...
    • MicroGNC:Arduino的指导,导航和控制库
      计算大圆上的方位角,距离和跨轨误差的方法。 用于解析和构造某些NMEA 0183和专有句子的类。 (NMEA 0183是美国国家海洋电子协会发布的专有协议,适用于船用导航和控制系统。) 仪器的基类,例如传感器,传感器...
    • GREATCIRCLE和LOXODROME:“当乌鸦飞过”和大黄lin:计算“当乌鸦飞过”时的路径坐标,距离以及沿大圆或大...
      使用一个输出参数返回距离距离向量,使用两个或更多输出参数返回路径坐标和可选的距离向量和沿路径的方位角。 函数 LOXODROME 计算具有恒定方位角的路径,以相同的角度穿过所有经度子午线。 它还返回距离向量和...
    • libiconv-1.1.tar.gz
      字符集转换程序