свойство высоты в менеджере местоположений, возвращающее ноль на Iphone при чтении местоположения GPS - PullRequest
0 голосов
/ 03 апреля 2011

Я пишу приложение, которое использует GPS. Я могу успешно получить широту, долготу и другие свойства, но высота, кажется, всегда возвращает «0,00». У меня есть следующий код, чтобы протестировать его наиболее простым способом, и все же получить 0,00. Код ниже:

-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation
{


// Stop updating location if renewed in less than 60 seconds
    if ([self timeBetweenLocationandNow] < 60)
{
    [locationManager stopUpdatingLocation]; 
    NSLog(@"GPS Stopped");
}


NSLog(@"Altitude:%.2f m",newLocation.altitude);
}

Есть идеи, что может быть не так? также на метод init у меня есть следующее:

- (id)init
{
self = [super init];

if (self != nil)
{
    // Create location manager Object
    locationManager = [[CLLocationManager alloc] init];
    // Set the delegate to this object
    [locationManager setDelegate:self];
    // Set distance filter and accuracy 
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    [locationManager startUpdatingLocation];
 }

return self;
}

Буду признателен за любую проницательность. спасибо

Ответы [ 2 ]

0 голосов
/ 03 апреля 2011

я нашел проблему. Как предположил Deepmist, делегат должен вызываться несколько раз. Я останавливал GPS после первого исправления. Который давал мне точные данные о координатах, но высота оставалась @ 0,00 до примерно трех или около того вызовов делегатов. Теперь я получаю данные о высоте, какой хороший способ проверить это? так что я могу остановить менеджер местоположения после того, как я получу данные? я могу проверить, что высота является ненулевым значением, но мне было интересно, есть ли другие свойства, которые следует использовать вместо этого, чтобы убедиться, что вы имеете максимально возможную точность, делающую все ваши данные о местоположении действительными (то есть ненулевые в некоторых свойствах ). спасибо

0 голосов
/ 03 апреля 2011

Я не эксперт, но вот как я понимаю: iPhone сильно отличается от других систем GPS из-за множества способов выяснения вашего местоположения. IPhone определяет местоположение тремя способами: локальные сигналы Wi-Fi, вышки сотовой связи и / или чип GPS. Использование GPS-спутника для определения местоположения может быть очень медленным, а прием в населенных городах может быть практически невозможен. Таким образом, iPhone в первую очередь смотрит на первые 2 варианта.

Данные о местоположении Wi-Fi поступают от людей, которые ездят по улицам и регистрируют горячие точки, что, очевидно, не даст намек на высоту. Я не уверен, дает ли триангуляция вышек сотовой связи какие-либо данные о высоте, но я предполагаю, что нет. Эти два метода чрезвычайно быстры по сравнению с gps, но, как вы видели, выдают высоту 0. Если вы находитесь в месте с приемлемым приемом GPS-спутников, iPhone может дать вам высоту, но даже в этом случае он может даже не найти ее, пока не получит спутниковый сигнал несколько раз и не вызовет делегат местоположения несколько раз, и даже тогда данные о высоте для GPS могут быть заведомо неточными.

Короче говоря, не стоит рассчитывать на точные данные о высоте с iPhone.

...