总是负速iOS

时间:2014-02-26 08:54:08

标签: ios iphone location cllocationmanager

我正在使用委托方法:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

要获取当前和旧位置,我使用了:

CLLocation *newLocation = [locations lastObject];
self.currentUserLocation = newLocation;

if(self.oldLocation == nil)
{
    self.oldLocation = newLocation;
    return;
}

编辑1:我现在可以找到旧位置。

但是当我使用[newLocation speed]; = -1

时,我总是有负速度

使用的设备是iPhone 4s。你有好主意吗 ?

另外,对于locationManager,我使用了kCLLocationAccuracyBestForNavigation和kCLDistanceFilterNone。我可以在地图上看到我当前的位置在移动。

编辑2:

我终于使用这种方法来解决速度问题:

- (CLLocationSpeed)speedTravelledFromLocation:(CLLocation*)fromLocation;
{
    NSTimeInterval tInterval = [self.timestamp timeIntervalSinceDate:fromLocation.timestamp];
    double distance = [self distanceFromLocation:fromLocation];
    double speed = (distance / tInterval);
    return speed;
}

此方法返回从self和fromLocation之间的距离和时间增量计算的速度。

我在此存储库中找到了此方法:https://github.com/100grams/CoreLocationUtils 希望它会帮助某人;)

编辑3

知道了!那是因为我在模拟器上测试!我在设备上进行了测试,使用[newLocation speed]的速度是正确的!

感谢您的帮助。 问候, Lapinou。

2 个答案:

答案 0 :(得分:1)

为什么您希望位置回调包含2个或更多位置?

此方法:

(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

通常只向您提供一个位置,除非由于某种原因多个位置在调用该方法之前到达,但您通常只会获得一个位置。

问题在于您假设该方法会为您提供以前的位置以及新位置,而且不是那样。

答案 1 :(得分:1)

负速度通常意味着您没有GPS信号。