1

我遇到了一个问题,有时我需要 15 秒左右才能找到我的位置。相反,谷歌地图几乎每次都会在几秒钟内找到我的位置。我想知道是否无论如何我可以加快核心位置和 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];

}    

}

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

4

2 回答 2

1

问题是准确性。在定位精度接近 10 米之前,您不会获得值。我不知道您的规格,但我个人使用更广泛的精度,当我获得第一个位置时,我会在位置管理器上更改所需的精度。
文档说:

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

但以我的经验并非如此,如果我设置为良好的准确性,则需要更多时间才能获得第一个位置,可能是因为它需要“启动”更多资源(只是猜测)。

于 2013-11-05T18:25:23.690 回答
0
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

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

于 2016-03-20T06:09:56.047 回答