加快核心位置

时间:2013-11-05 17:57:48

标签: ios core-location cllocationmanager

我遇到了一个问题,有时我需要15秒才能找到我的位置。相反,Google地图几乎每次都会在几秒钟内找到我的位置。我想知道无论如何我都可以加速核心位置和CLLocationManager,以便更快地找到用户位置。这是我的设置

self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.activityType = CLActivityTypeFitness;
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
[self.locationManager startUpdatingLocation];
[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(checkAccuracy:) userInfo:nil repeats:YES];

对于CLLocationManagerDelegate,我有:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    CLLocation* location = [locations lastObject];
    NSDate* eventDate = location.timestamp;
    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
    if (abs(howRecent) < 15.0) {
        // If the event is recent, do something with it.
        NSLog(@"latitude %+.6f, longitude %+.6f\n",
          location.coordinate.latitude,
          location.coordinate.longitude);

    [[NSNotificationCenter defaultCenter] postNotificationName:kLocationChanged object:nil];

}    

}

最后的通知会更改地图视图中心。有什么想法吗?我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

问题在于准确性。在定位精度接近10米之前,你没有得到价值。我不知道你的规格,但我个人使用更高的准确度,当我得到第一个位置时,我改变了位置管理员所需的准确度。 /> 文件说:

  

请求高精度位置数据时,初始事件   由位置服务提供可能没有您的准确性   请求。定位服务可以快速提供初始事件   尽可能。然后它继续确定位置   您要求的准确性,并根据需要提供其他活动,   何时该数据可用。

但根据我的经验并不是那样,如果我设定了准确性,那么第一个位置需要更多时间,可能是因为它需要“加电”更多资源(只是猜测)。

答案 1 :(得分:0)

self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

消耗更多电量,但您将获得更多位置更新。小心过滤低精度信号,并检查GPS信号的时间戳,以忽略旧的更新。