CLLocationManager奇怪的问题

时间:2011-09-05 11:38:59

标签: iphone ios cllocationmanager

我有一个MKMapView,每次加载视图时,或者在调用showLocation自定义类方法时,我都会删除注释。

我需要准确度才能做到最好

-(void)viewDidLoad {
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
    [locationManager startUpdatingLocation];
}
-(IBAction) showLocation:(id) sender{
    [locationManager startUpdatingLocation];
}
- (void) locationManager:(CLLocationManager *) manager
     didUpdateToLocation:(CLLocation *) newLocation
            fromLocation:(CLLocation *) oldLocation {
// start geocoding with newLocation coordinate which will automatically set annotation.
SVGeocoder *geocodeRequest = [[SVGeocoder alloc] 
                                      initWithCoordinate:CLLocationCoordinate2DMake(newLocation.coordinate.latitude, newLocation.coordinate.longitude)];
        [geocodeRequest setDelegate:self];
        [geocodeRequest startAsynchronous];
        [geocodeRequest release];
            [locationManager stopUpdatingLocation];
}

我的问题是调用didUpdateToLocation方法的时间是什么时候?只有在我执行[locationManager startUpdatingLocation]时才找到新位置?

当用户正在旅行和静止时,我正面临一些奇怪的问题。 假设用户从点A-> B-> C-> D行进,点之间间隔1分钟。当我在C点调用我的方法时,它会返回点A的坐标,有时是B点,有时是C.它只是随机的。

当我静止时更加奇怪。当我调用showLocation方法时,我得到了不同的坐标,即使我迷上了我的房子WiFi。

我正在考虑实施didUpdateToLocation以在5秒内获得最佳结果。如果在5secs内,它找到我定义的精度的特定位置,则使用坐标。如果没有,请使用在5秒时间内找到的最佳效果。但是,由于我是新手,我不知道如何编写类似的东西。我读了NSTimer,看起来它可能有效。

有什么建议吗?

提前多多感谢!

2 个答案:

答案 0 :(得分:1)

您从A点收到位置的原因之一是CoreLocation返回它先拥有的最后一个有效位置,直到它可以获得更准确的位置。当您致电[locationManager startUpdatingLocation];时,它会一遍又一遍地返回-didUpdateToLocation,直到您满意为止,最后致电-stopUpdatingLocation

我认为您只需要花一点时间就可以在停止更新位置之前获得更好的位置修复。我会考虑将停止更新位置从-didUpdateToLocation移到另一种方法。

答案 1 :(得分:0)

删除[locationManager stopUpdatingLocation];从你的代码和尝试。