2011-11-26 44 views
9

Tôi có ứng dụng dịch vụ vị trí, trong đó độ cao của người dùng được cung cấp. Tuy nhiên, tôi đã thấy rằng độ chính xác độ cao do CLLocationManager cung cấp là cực kỳ không chính xác. Khi tôi kiểm tra hai điểm giống nhau hai lần, đôi khi sự khác biệt độ cao là bốn mươi feet và đôi khi nó là một trăm. Có cách nào để tôi có thể cải thiện độ chính xác theo chiều dọc của CLLocation hay không, có cách nào khác để có được độ cao của người dùng (thư viện của bên thứ ba) không? Tôi đã thử kiểm tra thuộc tính verticalAccuracy của newLocation được cung cấp bởi CLLocationManager và ném nó ra nếu nó không đủ, nhưng ngay cả khi nó đủ chính xác, nó vẫn thường không thực sự chính xác. Cảm ơn vì đã dành thời gian cho tôi!Độ chính xác độ cao CLLocation

Ngay bây giờ tôi đang sử dụng:

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

Vấn đề với mã: thường là verticalAccuracy không bao giờ dưới 30, và khi nó, có nghĩa là vẫn còn thậm chí không gần đủ chính xác; Tôi đã kiểm tra mã đi bộ xung quanh nhà của tôi (một câu chuyện), và nó nói rằng độ cao thay đổi lên đến mười chín feet, mà tôi chắc chắn là không đúng sự thật.

Trả lời

22

Độ cao có nguồn gốc từ các vệ tinh GPS vốn đã kém chính xác rằng giải pháp ngang từ GPS do geometry của các vệ tinh . Bạn nên mong đợi độ chính xác theo chiều dọc thường thấp hơn khoảng 1,5 đến 3 lần so với độ chính xác ngang. Đó chỉ là một hạn chế của GPS và tại sao hàng không yêu cầu sửa chữa WAAS trước khi bạn có thể sử dụng GPS cho phương pháp tiếp cận công cụ.

Khi độ chính xác theo chiều dọc là 20 hoặc 30 mét, bạn nên mong đợi độ cao được giảm tối đa 100 feet. Mong đợi nó không thay đổi bởi 19 feet khi bạn đi bộ xung quanh nhà trong không thực tế.

Điều bạn có thể làm là giữ trọng số cán, trọng số trung bình (hoặc số Kalman filter) của các chỉ số độ cao "tốt" gần đây để giúp lọc ra các lỗi đo lường.

+0

Vâng, điều này có vẻ là sự thật không may. 1 cho lời giải thích tốt và liên kết tốt. –

2

Bạn đã thử mã nào? Đây là mã tốt nhất cho độ cao vì vậy tôi không nghĩ rằng có được bất cứ điều gì ngoài này:

-(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

Xem chỉnh sửa của tôi, vui lòng –

+0

Tôi khuyên bạn nên sử dụng mã của tôi vì đây là độ chính xác cao nhất có thể với iDevices. Nó vẫn là một chiếc điện thoại và độ chính xác không phải là tuyệt vời do hạn chế về thể chất. –

Các vấn đề liên quan