I'm assuming you're using an MKDirectionsRequest
to get a MKDirectionsResponse
from which you're getting your route. For example:
MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
// source and destination are the relevant MKMapItem's
request.source = source;
request.destination = destination;
// Specify the transportation type
request.transportType = MKDirectionsTransportTypeAutomobile;
// If you're open to getting more than one route, requestsAlternateRoutes = YES; else requestsAlternateRoutes = NO;
request.requestsAlternateRoutes = YES;
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
if (!error) {
self.directionsResponse = response;
}
}];
Once you get the MKDirectionsResponse
(in this case self.directionsResponse
) and decide on a specific route index from that response, the CLLocationDistance
of that route (measured in meters) can be found using:
MKRoute *route = self.directionsResponse.routes[currentRoute];
CLLocationDistance distance = route.distance;
And if you don't know which specific route you want to use -- ex. if you want to decide on a route based on the distance -- you can go through the directionsResponse.route
array with a loop to get all the route distances.
Edit: Furthermore, if you want to find the distance in time (measured in seconds), you can do so using:
NSTimeInterval seconds = route.expectedTravelTime;
And in Swift:
let request:MKDirectionsRequest = MKDirectionsRequest()
// source and destination are the relevant MKMapItems
request.setSource(source)
request.setDestination(destination)
// Specify the transportation type
request.transportType = MKDirectionsTransportType.Automobile;
// If you're open to getting more than one route,
// requestsAlternateRoutes = true; else requestsAlternateRoutes = false;
request.requestsAlternateRoutes = true
let directions = MKDirections(request: request)
directions.calculateDirectionsWithCompletionHandler ({
(response: MKDirectionsResponse?, error: NSError?) in
if error == nil {
self.directionsResponse = response
}
})
To get the distance:
let route = directionsResponse.routes[currentRoute] as MKRoute
let distance = route.distance
To get the expected travel time:
let seconds = route.expectedTravelTime