2015-05-06 44 views
0

我遇到了將位置發送給其他用戶的問題。我使用Parse.com作爲我的後端,我使用此代碼來獲得一個位置:位置管理器精度不是很準確

-(void)sendLocation{ 



    if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){ 

     [locationManager requestWhenInUseAuthorization]; 

    } 
    [locationManager startUpdatingLocation]; 



} 


- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    [locationManager stopUpdatingLocation]; //kill it NOW or we have duplicates 

    if(!self.haveLocation) { 

     self.haveLocation=YES; 

     NSLog(@"didUpdateToLocation: %@", newLocation); 

     self.currentLocation = newLocation; 
     self.currentLocationGeoPoint= [PFGeoPoint geoPointWithLocation:self.currentLocation]; 

} 

如果我從當前位置給自己發送消息,然後打開該郵件進行查看,通過比較當前的位置圈隨着銷子的下降,我可以看到他們不在同一個地方,相隔很遠。

我有BOOL var haveLocation以確保它只刷新一次。我需要更多次刷新嗎?任何關於如何使這更準確的指針將非常感激!由於

我嘗試下面的蘋果例子LocateMe:

我現在有:

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

    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow]; 

    if (locationAge > 5.0) return; 

    // test that the horizontal accuracy does not indicate an invalid measurement 
    if (newLocation.horizontalAccuracy < 0) return; 

    // test the measurement to see if it is more accurate than the previous measurement 
    if (self.bestEffortAtLocation == nil || self.bestEffortAtLocation.horizontalAccuracy > newLocation.horizontalAccuracy) { 
     // store the location as the "best effort" 
     self.bestEffortAtLocation = newLocation; 


     if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) { 

      [locationManager stopUpdatingLocation]; 

      //this code after getting the location 
      NSLog(@"didUpdateToLocation: %@", newLocation); 
} 

} 

}

然而,當我點擊發送位置它只運行永遠不會停止更新。我也設置了locationManager.desiredAccuracy = kCLLocationAccuracyBest;

+0

有你試過不殺死更新,只是記錄結果,看看它們是否有所不同? Geoloc可能會非常棘手,就像Rob說的那樣,經過幾次嘗試後,它有可能獲得準確性。 –

+0

您還可以將精度精度設置爲「最佳」 –

+0

我使用了這個locationManager.desiredAccuracy = kCLLocationAccuracyBest; – Kex

回答

2

位置管理器可能會向您發送多個更新,因爲它可以提高準確性。這是一項功能,旨在儘可能快地爲您提供信息,同時最終爲您提供最佳信息(至少達到您要求的準確度)。您正在積極避免這些更新,因此您可能會收到最不準確的信息。

您應該檢查horizontalAccuracy以確定它是否足夠準確供您使用。

請注意,您無法將horizontalAccuracykCLLocationAccuracyBest進行比較。 「最好」是一個常數-1。您需要將其與您需要的值(以米爲單位)進行比較,如果需要花費太長時間(如果系統可能無法爲您提供任何準確的值),可能會設置一個超時值。

+0

我只是看着horizo​​ntalAccuracy,並找到了一個蘋果公司稱爲LocateMe的例子。我上面編輯了我的問題。現在的問題是,該位置永遠不會停止更新。 – Kex

+0

正確。 'kCLLocationAccuracyBest'是-1。你不會得到好或更好的準確性。 –

+0

剛剛看到你的編輯,所以我可以做如果(newLocation.horizo​​ntalAccuracy <= 10)[locationManager stopUpdatingLocation];那會給半徑10米? – Kex