首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大圆距离问题(球形Vincenty情况和简化版本)

大圆距离问题(球形Vincenty情况和简化版本)
EN

Stack Overflow用户
提问于 2014-01-03 03:07:26
回答 2查看 2.1K关注 0票数 0
代码语言:javascript
复制
%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公式的球形情况来确定。我一直在引用距离

并由此创建了上面的MatLab代码。我尝试了给出的第一个方程(一个更简化的版本,但也没有用),所以我将使用Vincenty的情况。考虑到代码开头列出的两个lat/long点(十进制格式),我还没有用我的程序计算两点之间的正确距离。我似乎找不出到底是怎么回事,所以我问你们有没有办法帮我解决这个问题。

事先非常感谢您,我会经常查看这篇文章,这样我就可以通过回答您对我的代码的任何问题来帮助我。

基于这个网站:http://williams.best.vwh.net/gccalc.htm的距离应该是7381.56公里。

下面的第一个答案提醒我,我有映射工具箱,但是我不知道如何解释我得到的结果,所以请检查我在下面发布的评论。[ARCLEN, AZ] = distance(LAT1,LON1,LAT2,LON2)

这实际上是有效的,但我不知道我如何处理弧长或所产生的方位角。

谢谢大家,祝大家新年快乐。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-03 17:13:25

如果您只想要一个WGS84的答案,而不对算法进行编程,也不需要支付Mapping的费用,请下载Matlab包旋转椭球上的大地测量。这包括对Mapping函数的改进,称为geoddistance。解决你的问题

代码语言:javascript
复制
format long;
geoddistance(12.18993,133.45898,14.34243,65.12750)
->
7381566.23351761

地球距离的参数是以度为单位的,结果是以米为单位的。这将为WGS84椭球体进行计算。如果要使用差分椭球体,请指定第5个参数a,E。(对于一个球体,设e= 0;如果您想指定一个长方形椭球体,请将e设为纯虚的。正确的答案将被返回给小于0.2。

顺便提一句,维基百科在椭球大地测量上的文章中显示的许多大地测量图片都是用这个包绘制的。

票数 1
EN

Stack Overflow用户

发布于 2014-01-03 03:42:41

在MATLAB中,三角函数的默认单位是弧度。你似乎是在以度表示你的纬度和经度。要么转换为弧度,要么使用新德()cosd()函数。

或者,如果您碰巧安装了映射工具箱(但是Mathworks确实为此收取额外费用),您可以只使用距离()函数。如果您可以使用距离()函数,原则上它应该是更好的方法,因为它可以接受椭球地球模型

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20895861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档