CLLocationManager提供旧位置

时间:2011-06-05 17:43:19

标签: iphone objective-c cllocationmanager

在我的标题中,我把

CLLocationManager *locationManager;
@property (nonatomic, retain) CLLocationManager *locationManager;  

在我的实施文件中:

- (void)viewDidLoad
{
    self.locationManager = [[[CLLocationManager alloc] init] autorelease];
    self.locationManager.distanceFilter = 50.0f;
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
    self.locationManager.delegate = self; 
    [locationManager startUpdatingLocation];
    [super viewDidLoad];
}

然后在委托方法

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
        NSLog(@"Location: %g,%g", newLocation.coordinate.latitude, newLocation.coordinate.longitude );

}

现在我不断获得纬度和经度的旧值

用谷歌搜索我找不到的解决方案,我不明白我做错了什么,

请帮助

2 个答案:

答案 0 :(得分:4)

您可以使用该位置的timestamp来过滤过旧的位置更新:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    if ([newLocation.timestamp timeIntervalSinceNow] < -60) return; // location is not fresh
    ...
}

答案 1 :(得分:2)

根据我的经验,位置管理员只会在手机移动时收到位置更新 (可能是为了延长电池寿命)。

换句话说,如果手机在20分钟前在某个位置收到位置更新,并且手机未移动,则当您启动位置服务时,它会将该旧值作为“可接受”值返回newLocation对象。

这就是为什么albertamg的建议被普遍应用的原因,尽管缺点是通过过滤掉这些“旧的”更新,你冒着不能从静止的手机中检测到任何东西的风险。

希望这有助于=)