IOS CoreLocation высота
-
28-10-2019 - |
Вопрос
До iOS 4.0, CoreLocation
Был правильно сообщать о высоте, теперь она всегда сообщает как 0 футов.
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation
{
NSString *tLatitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.latitude];
NSString *tLongitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.longitude];
/* the following returns 0 */
NSString *tAltitude = [NSString stringWithFormat:@"%i", newLocation.altitude];
/* theres more code, but it's not relevant,
and this worked prior to iOS 4.0*/
[manager stopUpdatingLocation];
}
Не работая ни на устройстве, ни симуляторе, кто -нибудь еще испытывает эту проблему?
Решение
Если вы используете startMonitoringSignificantLocationChanges
, что было новой функцией для iOS 4.0, тогда вы не получите обновления высоты. В этом режиме с низкой мощностью используются только башни сотовой связи, чтобы выяснить местоположение пользователя, и этот метод не сообщает высота.
В более общем плане, у iPhone есть три способа выяснения вашего местоположения-сотовые башни, Wi-Fi и GPS. Вы получите высоту только после использования GPS. Так что даже если вы установите свой desiredAccuracy
Настройка, чтобы быть действительно точным, чтобы заставить устройство использовать GPS, если пользователь находится в помещении, iPhone, вероятно, не сможет получить сигнал GPS и будет отступить на ячейку или Wi-Fi. В этом случае вы не получите высоту. Также рассмотрим пользователей, которые находятся на iPod Touch-он имеет возможность получить местоположение только через Wi-Fi, и, следовательно, также не будет сообщать о высоте.
Другие советы
Две вещи, которые вы могли бы попробовать. Прежде всего, попробуйте установить менеджер местоположения desiredAccuracy
к kCLLocationAccuracyBest
.
Если это не сработает, попробуйте удалить [manager stopUpdatingLocation];
, и положите NSLog
в didUpdateToLocation
с высотой. Иногда необходимо немного сузить, прежде чем он отобразит высоту.
От Ссылка на основание данных местоположения:
А CLLocationDistance
Тип данных (тип данных для высоты) double
. Анкет Форматер, который вы используете для своего stringWithFormat
является integer
. Анкет Вам нужно бросить свою высоту на integer
, сначала или используйте double
(%f) Форматер.
Основное местоположение не всегда сообщает о высоте сразу. Обычно я проверяю нулевую высоту в моем методе «успеха». Если высота все еще 0, я продолжаю проверять, в противном случае я поворачиваюсь.