Как повысить точность GPS в iOS 12

#swift #gps #cllocationmanager #ios12 #horizontal-accuracy

#swift #gps #cllocationmanager #ios12 #горизонтальная точность

Вопрос:

Год назад я выпустил приложение для гольфа, основанное на GPS. Для наилучшего использования требуется высокая горизонтальная точность. С момента выпуска приложения все работало нормально (iOS 10 на тот момент была последней версией операционной системы). Теперь клиенты сообщают о плохой точности с iOS12, в основном, в сочетании с производными iPhone X.

Я смог восстановить проблему на своих устройствах разработки. На iPhone X точность по горизонтали <5 м больше недостижима. Раньше проблем не было. На iPhone 6s такой уровень точности достигается в редких случаях. На обоих устройствах была установлена iOS 12.2.

Вот соответствующий код в моем приложении:

Определение переменной в классе:

 var locationManager: CLLocationManager = CLLocationManager()
  

При просмотре загружался, который я поставил:

 locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.delegate = self
    locationManager.requestWhenInUseAuthorization()
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()
  

Тогда der — это следующая функция для определения местоположения ( latestLocation ), которая обрабатывается в коде (здесь не показана):

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

let latestLocation: CLLocation = locations[locations.count - 1]

horizontalAccuracy.text = String(format: "%.1f",latestLocation.horizontalAccuracy)


    if latestLocation.horizontalAccuracy <= 5.1 {
        horizontalDistance.backgroundColor = UIColor.green
    } else if latestLocation.horizontalAccuracy <= 10.1 {
        horizontalDistance.backgroundColor = UIColor.yellow
    } else {
        horizontalDistance.backgroundColor = UIColor.red
    }

    // remark: this sets the background color of a label according to 

achieved horizontal accuracy. Since iOS12 the maximum achieved level of accuracy with an iPhone X is medium (yellow background color).


/*
Some code processing location data
*/

}
  

В общем, код выполняется, как ожидалось, но на основе данных низкой точности. Что-то упущено в iOS 12 или есть способ обеспечить более высокую точность? Спасибо за вашу помощь!

Комментарии:

1. Я только что запустил тестовое приложение на iPhone 8 (12.2), iPhone 8 Plus (12.2), iPad Air 2 (12.2) и iPhone X (12.1.4) — все получили точность 5 м. На iPhone XR (12.2) точность была между 3.5 и 4.1, так что я не думаю, что есть общая проблема. Точность GPS сильно зависит от местоположения и окружающей среды

2. Спасибо, Пол. Использует ли ваше тестовое приложение тот же или аналогичный код, что описан выше. Я изменил приведенный выше код kCLLocationAccuracyBest на kCLLocationAccuracyBestForNavigation. Однако точность никогда не была выше 6,0 м (iPhone X, iOS12.2).

3. По сути, то же самое, за исключением того, что я использовал Swift. Я также установил тип активности в .fitness gist.github.com/paulw11/ea199a76b8e624ebb2ff3d809f022b13 . В какой среде вы находитесь? Я тестировал на открытом воздухе, в полевых условиях. Здесь нет зданий, высоких гор или деревьев — по сути, те же условия, что и на поле для гольфа. Телефон был у меня в руке, а не в кармане.

4. Еще раз спасибо за ваш быстрый отзыв. С тем же кодом — установив тип fitness и сохранив kCLLocationAccuracyBest — я достигаю после некоторого времени ожидания точности по горизонтали 6 м. Очевидно, что существуют разные уровни точности .. переход к 12 м, затем к 8 м и, наконец, к 6 м по горизонтали, как к наилучшему достигнутому значению. Раньше я испытывал 10 м и, наконец, 5 м в лучшем случае. У меня такое ощущение, что в моем приложении kCLLocationAccuracyBest в сочетании с . фитнес работает лучше всего (быстрее всего достигает наилучшего достижимого уровня точности).