я создаю приложение, которое использует местоположение -
все работает без помех кроме одной вещи -
когда я прихожу домой свои подключения iPhone к моей локальной сети Wi-Fi, и вместо того, чтобы получить мое местоположение с помощью gps в телефоне она пытается получить его путем выяснения, где моя сеть Wi-Fi подключена с - если я поворачиваюсь, мой Wi-Fi от нее сохраняет точную точку местоположения -
как только мой телефон подключен к моей сети Wi-Fi, это начинает говорить мне, что мое местоположение в нескольких км/мили от моей реальной точки.
я хотел бы, чтобы мое приложение НЕ использовало сеть Wi-Fi для попытки, получают мое местоположение -
есть ли способ, которым я могу - a. говорить, была ли точка местоположения получена из GPS, таким образом, я могу проигнорировать местоположения, полученные из сети Wi-Fi. b. службы определения местоположения остановки, перепрыгивающие к Wi-Fi для местоположения
Ну я тут немного поигрался
Нашел документацию apple, в которой говорится, что [location verticalAccuracy]
REQUIRES a device with gps.
Поэтому я вставил этот код (сокращенный) и, основываясь на ограниченном тестировании, которое я провел, похоже, что он делает то, что я хочу:
if (([location horizontalAccuracy] > 0) && ([location verticalAccuracy] > 0)){
//report location here
}
Спасибо всем за ваши ответы.
Кроме как попросить пользователя отключить Wifi, нет никакого документированного способа заставить менеджер местоположения использовать GPS через Wifi. Возможно, это возможно с помощью частного API, но в этом случае вам откажут в App Store.
Вы можете установить cLLocationAccuracy.desiredAccuracy = kCLLocationAccuracyBest и посмотреть, поможет ли это. Он должен попытаться ограничить использование GPS, однако это не является 100% гарантией.
A-GPS = GPS + триангуляция сотовых вышек. WI-FI позиционирование отсутствует.
iPhone получает неточные координаты GPS не только через Wi-Fi или мобильные сети, но также и в реальных координатах с уровнем точности> 100 метров.
Я использую следующую строку: if (newLocation.horizontalAccuracy <0 || newLocation.horizontalAccuracy> 50) return;
в качестве первой строки в didUpdateToLocation
, чтобы отфильтровать неточные координаты.
«Возраст местоположения», то есть NSTimeInterval locationAge = [locTimestamp timeIntervalSinceNow];
НЕ используется для избавления от кешированных координат.