IOS CoreLocation Высота
До 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 not relevant,
and this worked prior to iOS 4.0*/
[manager stopUpdatingLocation];
}
Не работает на устройстве или симуляторе, кто-нибудь еще испытывает эту проблему?
Ответы
Ответ 1
Если вы используете startMonitoringSignificantLocationChanges
, что является новой новинкой для iOS 4.0, то вы не получите обновлений высоты. Этот режим с низким энергопотреблением использует только сотовые башни для определения местоположения пользователя, и этот метод не сообщает о высоте.
В более общем плане iPhone имеет три способа выяснить ваше местоположение - сотовые башни, Wi-Fi и GPS. Вы будете получать высоту только при использовании GPS. Поэтому, даже если вы настроили настройку desiredAccuracy
на то, чтобы заставить устройство использовать GPS, если пользователь находится в помещении, iPhone, вероятно, не сможет получить сигнал GPS и отступит к соте или Wi-Fi. В этом случае вы не получите высоту. Также рассмотрите пользователей, которые находятся на iPod Touch - у него есть возможность получить местоположение через Wi-Fi, и, следовательно, также не сообщит о высоте.
Ответ 2
В Справочная информация о типах базовых данных:
Тип данных CLLocationDistance
(тип данных для высоты) - double
. Формат, который вы используете для stringWithFormat
, - это integer
. Сначала вам нужно указать свою высоту на integer
или использовать форматер double
(% f).
Ответ 3
Две вещи, которые вы могли бы попробовать. Прежде всего, попробуйте установить диспетчер местоположений desiredAccuracy
на kCLLocationAccuracyBest
.
Если это не сработает, попробуйте удалить [manager stopUpdatingLocation];
и поместите NSLog
в didUpdateToLocation
с высотой. Иногда он должен немного сужаться, пока не отобразит высоту.
Ответ 4
Местоположение Core не всегда сообщает высоту сразу. Обычно я проверяю нулевую высоту в методе делегата "успех". Если высота по-прежнему равна 0, я продолжаю проверять, в противном случае я перехожу к CoreLocation.