Ускорение основного местоположения

У меня проблема, когда мне иногда требуется 15 секунд или около того, чтобы найти свое местоположение. Наоборот, Google Maps находит мое местоположение в течение нескольких секунд почти каждый раз. Мне интересно, могу ли я в любом случае ускорить Core Location и 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];

}    

}

Уведомление в конце меняет центр просмотра карты. Есть идеи по этому поводу? я что-то упускаю?


person evenodd    schedule 05.11.2013    source источник


Ответы (2)


Проблема в точности. Вы не получаете значения до тех пор, пока точность определения местоположения не приблизится к 10 метрам. Я не знаю о ваших спецификациях, но лично я использую более широкую точность, и когда я получаю первое местоположение, я меняю требуемую точность в менеджере местоположений.
В документации сказано, что:

При запросе высокоточных данных о местоположении начальное событие, предоставленное службой определения местоположения, может не иметь запрошенной вами точности. Служба определения местоположения доставляет начальное событие как можно быстрее. Затем он продолжает определять местоположение с запрошенной вами точностью и при необходимости доставляет дополнительные события, когда эти данные доступны.

но по моему опыту это не так, если я настрою на хорошую точность, потребуется больше времени, чтобы получить первое местоположение, вероятно, потому, что ему нужно «включить» больше ресурсов (это просто предположение).

person Andrea    schedule 05.11.2013

self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

Он потребляет больше энергии, но вы будете получать больше обновлений местоположения. Будьте осторожны, чтобы отфильтровать сигналы низкой точности, а также проверить временную метку сигнала GPS, чтобы игнорировать старые обновления.

person Shibin S    schedule 20.03.2016