2009-09-08 29 views
8

我正在開發GPS應用程序。 你知道如何檢測移動設備的速度嗎?CLLocation速度

其實,我需要每2秒檢測一次速度。

我知道didUpdateToLocation當位置改變時調用方法。

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

但我認爲這種方法是不適合我的問題。

那麼,我需要在2秒內檢查[CLLocationManager location]的速度嗎?

有什麼建議嗎?

在此先感謝。

回答

26

如何低於從委託方法工作的代碼。 或者,如果您確實想要輪詢,請保留您之前的位置,並檢查上次輪詢後更改的距離,並使用手動方法(也在下面顯示)計算速度。

速度是以m/s計算/提供的,因此乘以3.6 km/km或2.23693629/mph。

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    //simply get the speed provided by the phone from newLocation 
    double gpsSpeed = newLocation.speed; 

    // alternative manual method 
    if(oldLocation != nil) 
    { 
     CLLocationDistance distanceChange = [newLocation getDistanceFrom:oldLocation]; 
     NSTimeInterval sinceLastUpdate = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp]; 
     double calculatedSpeed = distanceChange/sinceLastUpdate; 

    } 
} 
+5

從兩個選項(準確性而言)哪一個更好? – 2011-10-08 18:10:13

+1

getDistanceFrom已折舊。替換CLLocationDistance distanceChange = [newLocation getDistanceFrom:oldLocation];與CLLocationDistance distanceChange = [newLocation distanceFromLocation:oldLocation]; – Wes 2013-04-16 01:27:00

0

您只能真正使用您在問題中建議的委託方法。

即使您每2秒鐘訪問一次[CLLocationManager位置],您也只會收到上次在上述委託方法中收到的座標。

爲什麼需要每兩秒輪詢一次?在某些情況下,iphone可以在更短的時間內更新它的座標。

HTH