本文将参考文件: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.html
digitsOld = 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