2010-11-06 80 views
3

我開始混淆CLLocationManager,並試圖使用下面的回調方法。我去了外面在我的iPhone上測試它,並且在前幾次更新時,我似乎正在得到一些亂碼值,就像突然間我的距離是39米,即使我沒有移動到任何地方。或者有時它會從5開始,然後跳到20米,再次沒有我移動到任何地方。我走出去走了,從最初的起點看起來更新似乎是'好',然後當我回到原點時,我回到了原來的39米的起點。我想知道我在下面做的是否正確。我還包含了我的viewDidLoad方法,用於初始化我的CLLocationManager對象。使用CLLocationManager獲取精確的位置

有沒有辦法確保我的第一個值是準確的?提前致謝。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
} 
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    if (startingPoint == nil) { 
     NSLog(@"NIL starting point"); 
     self.startingPoint = newLocation; 
    } 

    CLLocationDistance distance = [newLocation distanceFromLocation:startingPoint]; 
    NSString *distanceString = [[NSString alloc] initWithFormat:@"%g m", distance]; 
    distanceLabel.text = distanceString; 
    [distanceString release]; 

    numberOfUpdates++; 
    NSString *countString = [[NSString alloc] initWithFormat:@"%d", numberOfUpdates]; 
    countLabel.text = countString; 
    [countString release]; 
} 

回答

5

GPS是一項不完善的技術。大氣條件,衛星可用性(和位置),天空能見度,附近物體(建築物)反射的信號都會導致其固有的不準確性。雖然有一個「準確度」值(即通常是相當不錯) - 即使這樣也不完全可靠。

飛機不允許使用GPS進行精確測量 - 即使他們的接收器不夠準確,而且他們需要其他技術(這有其自身的問題)。

嘗試運行標準「地圖」應用程序並將其用作比較。我認爲你的代碼很好 - 它只是GPS而已。

當然我是這麼說的,因爲我正在開發自己的海上導航應用程序,自己也遇到過所有這些問題。

2

在你didUpdate方法,你可以測試newLocation.horizontalAccuracy屬性的可接受值和折騰那是不可能的任何值(甚至是不可能的!)。

3

雖然這是一個老問題,我仍然想回答。第一次調用「didUpdateToLocation」通常是一些舊值,你應該總是檢查時間戳。從Apple文檔:

NSDate* eventDate = newLocation.timestamp; 
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow]; 
if (abs(howRecent) < 15.0) 
{ 
    // use the value 
} 
相關問題