Менеджер CLLocation иногда указывает неверное местоположение - PullRequest
0 голосов
/ 28 июня 2019

Я использую базовый API определения местоположения для iOS (менеджер CLLocation), и он иногда дает мне неправильное местоположение, как если бы я был в США, он дает мне широту и долготу Испании. Искал в стеке над потоком то же самое, но не смог получить соответствующий ответ на мой запрос. Будучи новичком в использовании карт и локаций, я немного растерялся. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

На самом деле Apple использует Wi-Fi устройства для определения местоположения.Таким образом, при «холодном» запуске чипу gps требуется некоторое время для запуска и поиска спутников, и в течение этого времени устройство использует местоположение, основываясь на mac-адресах маршрутизатора.Если ваш (или соседский) маршрутизатор когда-либо был в Испании, то в этом причина - база данных Mac адресов Apple обновляется очень медленно, для этого может потребоваться 1-3 месяца.

0 голосов
/ 28 июня 2019

Я предполагаю, что вы используете физическое устройство, а не симулятор для проверки этого, и вы не выбрали опцию для имитации местоположения в xcode.Иногда менеджер CLLocation может вернуть, например, старое кэшированное местоположение, так что, возможно, именно это и произошло с вами.Прежде чем что-либо делать с полученным объектом CLLocation, я рекомендую проверить его свойства horizontalAccuracy и timestamp.

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let lastLocation = locations.last, lastLocation.horizontalAccuracy < 1000, abs(lastLocation.timestamp.timeIntervalSinceNow) < 60 else {
        // location not accurate or to old (cached previously) so do not do anything
        return
    }
    // do something
}
...