我正在尝试执行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英里?如果是这样,则您的函数运行良好,但是调用该函数的方法有时未提供实际值。

10-08 15:31