CLLocation: сколько наблюдений необходимо для получения скорости в IOS - PullRequest
0 голосов
/ 24 января 2019

Apple и другие в Интернете рекомендуют вам получить скорость, используя Core Location через метод делегата didUpdateLocations, используя некоторую версию:

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *updatelocation = locations.lastObject;
    double speed = updatelocation.speed;
    speed = speed * 1.94384;     //converting speed from m/s to knots(unit)
    NSLog(@"Speed %f",speed);
}

Однако, чтобы сэкономить энергию, Apple также рекомендует вызывать stopUpdatingLocations в методе didUpdate:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    // Get a fix on the user's location
    ...

        // Stop location updates
        self.locationManager.stopUpdatingLocation()
}

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

Приложение не всегда должно знать скорость.Это просто должно предоставить точное чтение, когда пользователь запрашивает его.

Может ли кто-нибудь предложить рабочий подход, обеспечивающий точное считывание скорости при приемлемом уровне энергопотребления?

...