2014-09-06 97 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

相关问题