Точность возвышения - PullRequest
       29

Точность возвышения

9 голосов
/ 27 ноября 2011

У меня есть приложение службы определения местоположения, в котором указана высота пользователя.Однако я обнаружил, что точность высот, обеспечиваемая CLLocationManager, чрезвычайно неточна.Когда я дважды тестирую одни и те же пятна, иногда перепад высот составляет сорок футов, а иногда - сто.Можно ли как-то улучшить точность CLLocation по вертикали, или есть другой способ получения прав пользователя (сторонние библиотеки)?Я уже пытался проверить свойство verticalAccuracy объекта newLocation, предоставляемого CLLocationManager, и выбросить его, если этого недостаточно, но даже когда оно достаточно «точное», оно все еще часто не совсем точно.Спасибо за ваше время!

Прямо сейчас я использую:

if([newLocation verticalAccuracy] < 30) {
    if(isCustomary)
        altitudeLabel.text = [NSString stringWithFormat:@"%.2f feet", ([newLocation altitude] * 3.2808399)];
    else
        altitudeLabel.text = [NSString stringWithFormat:@"%.2f meters", [newLocation altitude]];
}

Проблемы с этим кодом: часто точность вертикали никогда не опускается ниже 30, а когда это происходит, это все еще даже неблизко к достаточно точным;Я проверил код, прогуливающийся по моему дому (одна история), и он говорит, что высота меняется до девятнадцати футов, что, я уверен, не соответствует действительности.

Ответы [ 2 ]

24 голосов
/ 29 ноября 2011

Высота, полученная от спутников GPS, по своей природе менее точна, чем горизонтальное решение от GPS из-за геометрии спутников. Следует ожидать, что точность по вертикали обычно в 1,5–3 раза хуже, чем точность по горизонтали. Это лишь ограничение GPS и почему авиации требуется коррекция WAAS, прежде чем вы сможете использовать GPS для заходов на посадку по приборам.

Когда вертикальная точность составляет 20 или 30 метров, вы должны ожидать, что высота будет ниже 100 футов. Ожидая, что он не изменится на 19 футов, пока вы ходите по дому нереально.

Что вы можете сделать, это сохранить скользящее средневзвешенное значение (или фильтр Калмана ) последних "хороших" показаний высоты, чтобы помочь отфильтровать ошибки измерения.

3 голосов
/ 29 ноября 2011

Какой код вы пробовали? Это лучший код для повышения, поэтому я не думаю, что есть что-то кроме этого:

-(void)awakeFromNib {
  locmanager = [[CLLocationManager alloc] init];
  [locmanager setDelegate:self];
  [locmanager setDesiredAccuracy:kCLLocationAccuracyBest];
  [locmanager startUpdatingLocation];
}

  - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
  heightMesurement.text = [NSString stringWithFormat: @"%.2f m",   newLocation.altitude];
}

  - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
  heightMesurement.text = @"0.00 m";
}
...