【发布时间】:2016-01-15 20:51:59
【问题描述】:
如果我从初始位置移动距离 x[m] 和 y[m],我必须为给定的纬度 (lat0) 和经度 (lon0) 计算新的纬度 (lat1) 和经度 (lon1)。例如:
clear all; clc;
%initial coordinates:
lat0=56;
lon0=5;
%moving away from lat0,lon0,
xcor=200; %[m]
ycor=100; %[m]
首先我使用这段代码计算 lat1 和 lon1:(来源:Adding distance to a GPS coordinate)
lat1=lat0+rad2deg((xcor/6372800))
lon1=lon0+rad2deg((ycor/6372800)/(cos(lat0)))
distance=sqrt(xcor^2+ycor^2)
现在我想用半正弦方程检查我的答案:
dlat = deg2rad(lat1-lat0);
dlon = deg2rad(lon1-lon0);
lat0 = deg2rad(lat0);
lat1 = deg2rad(lat1);
a = (sin(dlat./2)).^2 + cos(lat0) .* cos(lat1) .* (sin(dlon./2)).^2;
c = 2 .* asin(sqrt(a));
distance_check=6372800*c
但是,与前 3 行代码中计算的距离相比,大多数情况下,与 hasrsine 的距离相差 100 多米。
这段代码出了什么问题?
【问题讨论】:
-
网站www8.nau.edu/cvm/latlongdist.html给出了与haversine方程相同的答案...这意味着错误必须在第一次初始计算中?
-
我自己发现了错误。在第一个代码的第 2 行中,cos(lat0) 必须是 cos(deg2rad(lat0))。我希望这篇文章将来能帮助一些人:)
-
也许使用
cosd(lat0)而不是cos(lat0)?编辑:迟到 35 秒:P -
@JurriënPlijter:当您自己找到答案后,请写下您自己问题的答案并接受。