iOS CoreLocation Altitude - PullRequest
       43

iOS CoreLocation Altitude

10 голосов
/ 02 февраля 2011

До 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];
}

Не работает ни на устройстве, ни на симуляторе, кто-нибудь еще сталкивался с этой проблемой?

Ответы [ 4 ]

12 голосов
/ 27 января 2012

Если вы используете startMonitoringSignificantLocationChanges, которая была новой для iOS 4.0, вы не будете получать обновления высоты над уровнем моря. В этом режиме с низким энергопотреблением для определения местоположения пользователя используются только вышки сотовой связи, и этот метод не сообщает о высоте.

В общем, у iPhone есть три способа определения вашего местоположения - вышки сотовой связи, Wi-Fi и GPS. Вы будете получать высоту только при использовании GPS. Таким образом, даже если вы установите действительно точную настройку desiredAccuracy, чтобы заставить устройство использовать GPS, если пользователь находится в помещении, iPhone, вероятно, не сможет получить сигнал GPS и переключится на сотовый или Wi-Fi. В этом случае вы не получите высоту. Также рассмотрите пользователей, которые находятся на iPod Touch - у него есть возможность только найти местоположение через Wi-Fi, и, таким образом, также не сообщать о высоте.

2 голосов
/ 02 февраля 2011

Две вещи, которые вы могли бы попробовать.Прежде всего, попробуйте установить для desiredAccuracy менеджера местоположений значение kCLLocationAccuracyBest.

. Если это не сработает, попробуйте удалить [manager stopUpdatingLocation]; и поместить NSLog в didUpdateToLocation с высотой.,Иногда нужно немного сузиться, прежде чем отобразить высоту.

1 голос
/ 02 февраля 2011

Из Справочник типов данных местоположения ядра :

Тип данных CLLocationDistance (тип данных для высоты) является double. Форматер, который вы используете для stringWithFormat - это integer. Сначала вам нужно указать высоту integer или использовать форматер double (% f).

0 голосов
/ 31 мая 2011

Базовое местоположение не всегда сразу сообщает о высоте.Я обычно проверяю нулевую высоту в моем методе делегата "успеха".Если высота все еще равна 0, я продолжаю проверять, в противном случае я включаю CoreLocation.

...