2014-09-06 4 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) 

하지만 Google지도에

예상 소요 시간 30 분 이상, 그리고 9 마일 이상 거리

나는 어디로 가고 있습니까?

답변

1

문제점이 intValue 대신 doubleValue의 사용 이러한 변환은 다음과 같습니다

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

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


시작 및 대상 좌표가 분수 부분을 가지고 (예를 들어 37.776402을) 그래서 당신은 정의 유형을 일치하는 (doubleValue를 사용해야합니다 위도와 경도는 CLLocationCoordinate2D 구조체에 있음). intValue를 사용


코드는 산타 크루즈, 캘리포니아에서 골프 코스 안에 짧은 여행이다 37, -122-37, -122에서 경로를 받고있다


위의 라인에서 intValuedoubleValue으로 변경하십시오.