我有一个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。这只是随机的。

当我静止不动时,这更加奇怪。即使我已连接到家庭WiFi,当我调用showLocation方法时,也会得到不同的坐标。

我正在考虑实现didUpdateToLocation以在5秒内获得最佳结果。如果在5秒内找到我定义的精度的特定位置,则使用坐标。如果没有,请使用5秒钟内的最佳值。但是由于我是新手,所以我不确定如何编写类似的代码。我读了NSTimer,看来它可能有用。

有什么建议吗?

在此先多谢!

最佳答案

您从A点收到位置的原因之一是CoreLocation返回了它最先拥有的最后一个有效位置,直到可以获取更准确的位置为止。当您呼叫[locationManager startUpdatingLocation];时,它将一遍又一遍地返回-didUpdateToLocation,直到您被注册为止,最后再呼叫-stopUpdatingLocation

我认为您只需要花一点时间就可以得到更好的位置修复,然后再停止更新位置。我会考虑将停止更新的位置从您的-didUpdateToLocation移至其他方法。

10-08 06:43