2014-09-06 52 views
1

我正在嘗試計算我的應用程序中的expectedTravelTime,但與GoogleMaps相比,我獲得了不同的值。我從MKRoute得到了錯誤的expectedTravelTime

這裏是我的代碼:

NSArray *startLocationArray = [startLocation componentsSeparatedByString:@","]; 
NSArray *destinationArray = [destination componentsSeparatedByString:@","]; 

MKPlacemark *placemarkStartLocation = [[MKPlacemark alloc] initWithCoordinate:CLLocationCoordinate2DMake([startLocationArray[0] intValue], 
                          [startLocationArray[1] intValue]) addressDictionary:nil]; 
MKMapItem *mapItemStartLocation = [[MKMapItem alloc] initWithPlacemark:placemarkStartLocation]; 

MKPlacemark *placemarkDestination = [[MKPlacemark alloc] initWithCoordinate:CLLocationCoordinate2DMake([destinationArray[0] intValue], 
                          [destinationArray[1] intValue]) addressDictionary:nil]; 
MKMapItem *mapItemDestination = [[MKMapItem alloc] initWithPlacemark:placemarkDestination]; 

MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init]; 
[request setSource:mapItemStartLocation]; 
[request setDestination:mapItemDestination]; 
[request setTransportType:MKDirectionsTransportTypeAutomobile]; 
[request setRequestsAlternateRoutes:NO]; 
MKDirections *directions = [[MKDirections alloc] initWithRequest:request]; 
__block MKRoute *route; 

[directions calculateDirectionsWithCompletionHandler: 
^(MKDirectionsResponse *response, NSError *error) 
{ 
    if (! error && [response routes] > 0) 
    { 
     route = [[response routes] objectAtIndex:0]; 

     double exceedingTime = fmod(route.expectedTravelTime, 60); 
     eta = (route.expectedTravelTime - exceedingTime)/60; 
     int iEta = (int)eta; 

     lblEta.text = [NSString stringWithFormat:@"%im", iEta, nil]; 
    } 
}]; 

startLocation和目標傳遞的方法外,他們的價值觀是:

startLocation = 37.776402,-122.408470 
destination = 37.831287,-122.485519 

我得到:

route.distance = 1513 (meters) 
route.expectedTravelTime = 491 (should be seconds, so finally 8 minutes) 

,但是,谷歌地圖我獲得了超過30分鐘的預計旅程時間和超過9英里的 距離

我哪裏錯了?

回答

1

的問題是這些轉換其使用的intValue代替doubleValue

[startLocationArray[0] intValue], [startLocationArray[1] intValue] 

[destinationArray[0] intValue], [destinationArray[1] intValue] 


的起點和終點的座標有一個小數部分(如37.776402),所以你必須使用doubleValue(其匹配定義的類型在CLLocationCoordinate2D結構中的經度和緯度)。


使用intValue,代碼正從37, -12237, -122的路線是在Santa Cruz,CA高爾夫球場內部的短途旅行


將上述行中的intValue更改爲doubleValue

相關問題