В iPhone мы можем настроить службы определения местоположения двумя способами -
- Используя
Standard Location Services
, это спутниковый GPS, который предоставляет вам более точные данные. - Используя
Significant Location Changes
который использует A-GPS или получает местоположение через Wi-Fi, который предоставляет менее точные данные.
Мы можем настроить службы определения местоположения любым из этих двух методов, но это зависит от требований приложения,Если это приложение navigation app
или location tracking app
, то нам следует использовать Standard Location Services
, но перед использованием стандартных служб мы помним, что если вам нужны более точные данные, вам придется страдать с battery consume more quickly
.Если приложение не требует обновления местоположения чаще, а также accuracy doesn't matter
, то нам следует Significant Location Changes
, поскольку оно будет save a lot of battery
потреблять по сравнению со стандартной службой определения местоположения.
Стандартная служба определения местоположения использует *Значение 1020 * и distanceFilter
для определения того, когда и когда следует доставлять событие.
desiredAccuracy
- это параметр, с помощью которого вы можете определить, какую точность вы хотите получить от оборудования GPS.Он использует некоторые заранее заданные константы, так как -
kCLLocationAccuracyBestForNavigation
kCLLocationAccuracyBest
kCLLocationAccuracyNearestTenMeters
kCLLocationAccuracyHundredMeters
kCLLocationAccuracyKilometer
kCLLocationAccuracyThreeKilometers
distanceFilter
- это параметр, в котором вы должны определить расстояние, означает, на сколько разрыва расстояния вы хотите попросить оборудование GPS отправить обновление местоположения.
В вашем случае вы имеете дело с параметром скорости, так что я думаю, это связано с навигацией.Поэтому вы должны использовать Standard Location Services
.Я думаю, что вы тоже это делаете, но проблема, с которой вы сталкиваетесь, заключается в отставании между обновлениями местоположения.Здесь я предлагаю вам изменить значение desiredAccuracy
и distanceFilter
на это -
[locationManager setDesiredAccuracy: kCLLocationAccuracyNearestTenMeters];[locationManager setDistanceFilter: 10.0f];
, установив для него значения, вы получите обновление местоположения менее чем за 1 секунду, если вы за рулем.
Еще одна вещь, которую вы должны запомнитьчто при получении обновления местоположения вы должны проверить его значение timestamp
, чтобы игнорировать старые обновления местоположения.Это потому, что когда вы набираете locationManager
, позвонив по номеру startUpdatingLocation
, первое полученное вами местоположение может быть вашим старым местоположением.Также вы должны проверить значение horizontalAccuracy
, потому что первые несколько обновлений местоположения, которые вы получаете, всегда не точны и могут иметь точность в 1000 или более, что вы не ищете.Поэтому вы должны проверить его значение, чтобы игнорировать неточные обновления местоположения.
Note: If you try with different accuracy and different distance filter value then you will be more clear about it how accurate data iPhone GPS hardware return.