我正在尝试执行great circle distance calculation。如您所愿,Location
类具有计算中列出的属性。
- (NSNumber *)greatCircleDistanceFrom:(Location *)other
{
// Unpack all the NSNumbers into doubles so we can manipulate them
double selfCosRadLat = [self.cosRadLat doubleValue];
double otherCosRadLat = [other.cosRadLat doubleValue];
double selfRadLng = [self.radLng doubleValue];
double otherRadLng = [other.radLng doubleValue];
double selfSinRadLat = [self.sinRadLat doubleValue];
double otherSinRadLat = [other.sinRadLat doubleValue];
// Multiplying by 3959 calculates the distance in miles.
double d = acos(selfCosRadLat
* otherCosRadLat
* cos(selfRadLng - otherRadLng)
+ selfSinRadLat
* otherSinRadLat
) * 3959.0;
return [NSNumber numberWithDouble:d];
}
在运行单元测试的一半时间里,我得到了正确的值。另一半,我得到
6218.78265778
。 最佳答案
确保传入的Location
值不是nil
或0,0。似乎得到这样的常数的原因似乎是因为它像在0°,0°一样进行数学运算。您距离西非大约6218英里?如果是这样,则您的函数运行良好,但是调用该函数的方法有时未提供实际值。