%Great Circle Distnace -- Simplified
%% 12.18993,133.45898 %% point 1 (lat/long)
%% 14.34243,65.12750 %% point 2 (lat/long)
%%VARIABLES%%
phi_1=12.18993; %lat_1
phi_2=14.34243; %lat_2
gam_1=133.45898; %long_1
gam_2=65.12750; %long_2
delt_gam = abs(gam_1 - gam_2); %absoulte difference in longitudes
R_Earth = 6371000; %mean radius of the earth in meters, change to FT to get distance accordingly
%%Unsimplified Great-Circle Equation -- Breaking it up into numerator and
%%denominator sections to avoid more problems -- Spherical Case of the
%%Vincenty Formula
Numer_sec1= ((cos(phi_2))*(sin(delt_gam))^2);
Numer_sec2=(((((cos(phi_1))*(sin(phi_2)))+((sin(phi_1))*(cos(phi_2))*(delt_gam))))^2);
Denom_1= (((sin(phi_1))*(sin(phi_2)))+((cos(phi_1))*(cos(phi_2))*delt_gam));
delt_sig2=atan((sqrt(Numer_sec1+Numer_sec2))/(Denom_1));
delt_GC2=R_Earth*delt_sig2;
disp(delt_GC2)
嘿伙计们,所以目前我正试图通过MatLab中的Vincenty公式的球形案例来确定两个Lat / Long点之间的距离。我一直在引用http://en.wikipedia.org/wiki/Great-circle_distance
从中创建了上面的MatLab代码。我尝试了第一个给出的方程式(一个更简化的版本,但也无济于事),所以我将使用Vincenty案例。鉴于在代码开头列出的两个纬度/经度(十进制格式),我还没有用我的程序计算两点之间的正确距离。我似乎无法找出发生了什么,所以我问你们有没有办法帮助我解决这个问题。
非常感谢您提前,我将经常查看帖子,以便我可以帮助您回答有关我的代码的任何问题。
基于此网站:http://williams.best.vwh.net/gccalc.htm距离应为7381.56km。
下面的第一个答案提醒我,我有映射工具箱,但我不确定如何解释我得到的结果,所以请检查我在下面发布的提交。
[ARCLEN, AZ] = distance(LAT1,LON1,LAT2,LON2)
这实际上是可行的,但我不确定我对弧长或产生的方位角做了什么。
感谢大家新年快乐。
答案 0 :(得分:1)
MATLAB中三角函数的默认单位是弧度。您似乎以度为单位指定纬度和经度。要么转换为弧度,要么使用sind()和cosd()函数。
或者,如果您碰巧安装了映射工具箱(但Mathworks确实为其额外收费),您可以使用distance()功能。如果可以使用distance()函数原则上应该是优越的方式,因为它可以接受ellipsoidal Earth model。
答案 1 :(得分:1)
如果你只是想要一个WGS84的答案而不编程 算法并且无需为Mapping Toolbox付费,请下载 Matlab包Geodesics on an ellipsoid of revolution。这个 包括对Mapping Toolbox功能的改进, 称为geoddistance。解决您的问题
format long;
geoddistance(12.18993,133.45898,14.34243,65.12750)
->
7381566.23351761
geoddistance的论据以度为单位,结果是 米。这是WGS84椭圆体的计算。如果你想 使用差异椭球指定第5个参数[a,e](赤道 半径,偏心率)。 (对于球体,设置e = 0;如果要指定长椭球,请将e设置为纯虚数。为| e |< 0.2返回准确的答案。)
顺便提一下,许多测地线图片都显示在 关于ellipsoidal geodesics的维基百科文章就是这样写的 封装