如果我有两个GPS位置,例如51.507222,-0.1275和48.856667,2.350833,我可以使用什么公式来计算两者之间的距离?我已经听说过很多关于's hasrsine公式的信息,但找不到任何关于它的信息,或者如何将它应用于C语言。
我写了下面的代码,然而,这是非常真实的。谁知道为什么?我无法弄清楚。问题来自函数本身,但我不知道它是什么。
float calcDistance(float A, float B, float C, float D)
{
float dLat;
float dLon;
dLat = (C - A);
dLon = (D - B);
dLat /= 57.29577951;
dLon /= 57.29577951;
float v_a;
float v_c;
float distance;
v_a = sin(dLat/2) * sin(dLat/2) + cos(A) * cos(C) * sin(dLon/2) * sin(dLon/2);
v_c = 2 * atan2(sqrt(v_a),sqrt(1-v_a));
distance = r * v_c;
return distance;
}
答案 0 :(得分:4)
答案 1 :(得分:2)
您正在寻找的是great circle distance。
答案 2 :(得分:1)
This page有一个Javascript块,我相信你可以在C中轻松适应:
var R = 6371e3; // metres
var φ1 = lat1.toRadians();
var φ2 = lat2.toRadians();
var Δφ = (lat2-lat1).toRadians();
var Δλ = (lon2-lon1).toRadians();
var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
Math.cos(φ1) * Math.cos(φ2) *
Math.sin(Δλ/2) * Math.sin(Δλ/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
答案 3 :(得分:1)
也许为时已晚,但这是计算不准确的原因: - > A和C(lat1和lat2)也必须从度转换为弧度
dLat /= 57.295779513082325;
dLon /= 57.295779513082325;
lat1 /= 57.295779513082325;
lat2 /= 57.295779513082325;
的问候, omeier