CLLocationManager с kCLLocationAccuracyBestForNavigation не очень точный - PullRequest
1 голос
/ 02 июля 2019

Я разрабатываю приложение для бегунов, поэтому мне нужны высокоточные GPS-координаты. Версия для Android готова, сейчас я тестирую с версией для iOS. Я использую провайдера местоположения по умолчанию в Swift следующим образом:

locationManager = CLLocationManager()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
            locationManager.distanceFilter = 1.0
            locationManager.requestAlwaysAuthorization()
            locationManager.allowsBackgroundLocationUpdates = true

И координаты я обрабатываю следующим образом:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        let location = locations.last as CLLocation?
        let accuracy = location?.horizontalAccuracy

}

Когда точность ниже 20, я обрабатываю координату в 'location' и показываю местоположение на карте. Это работает нормально, но точность далека от хорошей.

kCLLocationAccuracyBestForNavigation должен давать наилучшие результаты, но ...

Сегодня я тестировал одновременно два устройства: одно устройство Android (цена: 150 долларов) и iPhone X (цена: 1000 долларов). Устройство Android показывает мне местоположение максимум в 10 метрах от моего реального местоположения. IPhone X с кодом выше показывает мне в 70% случаев местоположение примерно в 30-40 метрах от моего реального местоположения. Это не достаточно хорошо для работающего приложения, которое дает устные инструкции.

Не может быть, чтобы приемник GPS в iPhone X был более низкого качества, чем приемник GPS в Huawei Y5? Условия окружающей среды были точно такими же.

Есть ли способ получить более точные местоположения?

1 Ответ

0 голосов
/ 02 июля 2019

Я бы предложил вам

locationManager.desiredAccuracy = kCLLocationAccuracyBest

зная, что эта опция будет потреблять больше энергии от вашего устройства в соответствии с документацией по ссылке ниже

CLLocationAccuracy

обратите внимание, что приведенный ниже код предназначен для автомобильной навигации

locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation

...