我正在使用委托方法:
- (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。
答案 0 :(得分:1)
为什么您希望位置回调包含2个或更多位置?
此方法:
(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
通常只向您提供一个位置,除非由于某种原因多个位置在调用该方法之前到达,但您通常只会获得一个位置。
问题在于您假设该方法会为您提供以前的位置以及新位置,而且不是那样。
答案 1 :(得分:1)
负速度通常意味着您没有GPS信号。