2014-03-03 74 views
0

在我的iOS應用程序中,我必須跟蹤從起點到當前位置的距離。我實現了這個代碼:獲取兩點之間的距離時遇到問題

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    CLLocation *currentLocation = [locations lastObject]; 
    CLLocation *startLocation = [locations firstObject]; 
    [coordArray addObject:currentLocation]; 
    float speed = currentLocation.speed * 3.6; 
    if (speed > 0) { 
     self.labelSpeed.text = [NSString stringWithFormat:@"%.2f Km/h", speed]; 
     [speedArray addObject:[NSNumber numberWithFloat:speed]]; 
    } 
    CLLocationDistance distance = [startLocation distanceFromLocation:currentLocation]; 
} 

但是,當我嘗試使用應用程序它沒有得到一個距離。我需要的距離,以顯示它的標籤,並與距離,我會用這個公式計算步數:

steps = distance/length of human step

我知道這是不準確的,但我不能使用加速度計,因爲當iPhone的顯示不活躍時它不起作用。有人建議我this solution。爲什麼我的代碼不能給我一個距離?

+1

它在幹什麼。試圖獲得距離後,距離的值是多少? currentLocation和startLocation的值是什麼?除非你給我們提供有關它在做什麼的信息,否則我們無法提供幫助。 「它不工作」不是很具描述性。 – Fogmeister

回答

2

回調

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 

不給你至少一個位置,和位置陣列持有sonly多個對象,如果位置更新被推遲之前。爲了獲得行走/駕駛距離,您必須將初始位置存儲在類變量或屬性中。然後,當你想計算一個距離時,按照上面的代碼進行,但使用包含初始位置的類變量。

+0

謝謝,我明白我愚蠢的錯誤。所以我必須通過這個代碼'self.startLocation = [locations firstObject];'將開始位置存儲在一個屬性中,並且在我應該通過此代碼計算距離之後'CLLocationDistance distance = [self.startLocation distanceFromLocation:currentLocation];'對? – lucgian841

+2

@ lucgian841:除了如果你正在尋找「距離我有多遠」,而不是「我跑了多久」,我想補充一點:你不能定義startPosition和currentPosition之間的距離,你需要從pos1到pos2 +從pos2到pos3 + ... +從posx到currentPosition。否則,如果用戶跑50公里,然後返回49公里,你的距離將是1公里而不是99公里。跳這個幫助 –

+0

是的,請注意@ArmandDOHM的評論 – Volker

0

檢查下面的代碼用於獲取距離:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 


    if ([coordArray count]>0) { 

     CLLocation *currentLocation = manager.location; 
     CLLocation *startLocation = [coordArray objectAtIndex:0]; 
     [coordArray addObject:currentLocation]; 
     float speed = currentLocation.speed * 3.6; 
     if (speed > 0) { 
      NSLog(@"\n speed:%@",[NSString stringWithFormat:@"%.2f Km/h", speed]); 
     } 

     CLLocationDistance distance = [startLocation distanceFromLocation:currentLocation]; 

     if (distance>0) { 
      NSLog(@"Distance:%@",[NSString stringWithFormat:@"%lf meters",distance]); 
     } 

    } 
    else{ 
     [coordArray addObject:manager.location]; 
    } 
}