在计算两个纬度/经度坐标之间的距离时,我的输出似乎略微偏离,我似乎无法解决原因。下面是我的代码(Haversine公式的实现)
float calcDistance(double latHome, double lonHome, double latDest, double lonDest) {
double pi = 3.141592653589793;
int R = 6371; //Radius of the Earth
latHome = (pi/180)*(latHome);
latDest = (pi/180)*(latDest);
double differenceLon = (pi/180)*(lonDest - lonHome);
double differenceLat = (pi/180)*(latDest - latHome);
double a = sin(differenceLat/2) * sin(differenceLat/2) +
cos(latHome) * cos(latDest) *
sin(differenceLon/2) * sin(differenceLon/2);
double c = 2 * atan2(sqrt(a), sqrt(1-a));
double distance = R * c;
printf("%f\n", distance);
return distance;
}
输入:38.898556 -77.037852 38.897147 -77.043934
输出:0.526339
假设得到0.5492
答案 0 :(得分:3)
我能想到的唯一一件事(如果修复了会产生预期的结果)是你覆盖本地参数latHome
和latDest
(但在计算时可能应该使用原始参数{ {1}}和differenceLon
以上differenceLat
)。为a
使用其他名称,然后使用新名称计算latHomeTmp
,它将起作用,如:
a
一般来说,保持传递给函数的参数是不可变的是一个好主意,以避免像这样的情况(当然,不是一套石头规则,但我通常会遵守它)。