2011-11-26 20 views
9

Kullanıcının yükseltmesinin sunulduğu bir yer hizmeti uygulaması var. Yine de, CLLocationManager tarafından sağlanan yükseklik doğruluğunun son derece yanlış olduğunu buldum. Aynı iki noktayı iki kere test ettiğimde, bazen yükseklik farkı kırk ayaktır ve bazen yüzlercedır. CLLocation'ın dikey doğruluğunu geliştirebilmem için herhangi bir yolu var mı, yoksa kullanıcının yüksekliğini (üçüncü taraf kütüphaneleri) elde etmenin farklı bir yolu var mı? CLLocationManager tarafından sağlanan yeni Konumun verticalAccuracy özelliğini kontrol etmeyi ve yeterli değilse atmayı denedim, ancak "doğru" olduğu zaman bile, yine de genellikle doğru değil. Zaman ayırdığın için teşekkürler!CLLocation yükseklik doğruluğu

Şu anda kullanıyorum:

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

Sorunları o kodla: genellikle verticalAccuracy 30'un altında geçmez ve bu olduğunda, o halen yeterince doğru yakın bile değildir; Evimin etrafında dolaşan kodu test ettim (bir hikaye) ve bu yükselişin on dokuz aya kadar değiştiğini söylüyor, ki eminim ki bu doğru değil.

cevap

22

GPS uydularından elde edilen yükseklik GPS yatay çözümde de bağlı uyduların geometry doğal olarak daha az doğrudur . Dikey doğruluğun genellikle yatay doğruluktan yaklaşık 1,5 ila 3 kat daha kötü olmasını beklemelisiniz. Bu sadece GPS'in bir sınırlaması ve GPS'in enstrüman yaklaşımları için kullanabilmeniz için havacılığın neden WAAS düzeltmesi gerektirdiğini.

Dikey doğruluk 20 veya 30 metre olduğunda, irtifanın 100 metreye kadar çıkmasını beklemelisiniz. Gerçeksizce evin etrafında dolaşırken 19 feet kadar değişmeyeceğini bekliyorum.

Yapabilecekleriniz, ölçüm hatalarının filtrelenmesine yardımcı olmak için son "iyi" yükseklik okumalarının bir yuvarlanma, ağırlıklı ortalama (veya Kalman filter) olmasını sağlamaktır.

+0

Evet, bu talihsiz gerçek gibi görünüyor. İyi bir açıklama ve iyi bir bağlantı için +1. –

2

Hangi kodları denediniz? Bu yükseklik için en iyi kod sanmıyorum bu yüzden bunun ötesinde bir şey var olmasıdır:

-(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"; 
} 
+0

Düzenlememe bakın, lütfen –

+0

Önerdiğim kodumun kullanımı sadece iDevices ile mümkün olan en iyi doğruluktur. Bu hala bir telefon ve fiziksel sınırlamalar nedeniyle doğruluk o kadar da büyük değil. –