3

I need to find the driving distance between 2 locations. I do not need to display the directions in a map, just need to calculate the distance, which I need to use in my application.

Does MapKit allow this? Is there an alternative that can be used?

I am able to get forward geo-coding using CloudMade, but there doesn't seem to be an option to obtain driving distance.

Appreciate any help.

Prasanna
  • 688
  • 1
  • 9
  • 27

3 Answers3

3

CloudMade also offers driving directions. If you are only interested in the distance, simply ignore the instructions.

An API-Call looks like this:

http://navigation.cloudmade.com/YOUR-API-KEY-GOES-HERE/api/0.3/47.25976,9.58423,47.26117,9.59882/car/shortest.js

and the JSON includes

....
route_summary: {
total_distance: Distance in meters,...

Source

Felix Lamouroux
  • 7,414
  • 29
  • 46
  • Thanks for the heads up. That works. The frustrating part is that the cloudmade API is in such intense development that documentation becomes easily outdated. Is there a v2 version of this call, or will this call continue to work in the future? Thanks. – Prasanna Jan 21 '10 at 13:11
  • We have worked with the API for routing since August last year and did not see any changes since (other than it becoming faster and better on the backend). – Felix Lamouroux Jan 21 '10 at 14:18
2

Found this in Google Groups, is that helpful?

http://groups.google.com/group/google-maps-api/msg/4dc2fad4f74e3314?pli=1

Marco
  • 6,692
  • 2
  • 27
  • 38
1

In my applications I used MKDirections to get driving (walking) distance between two location.

CLLocationCoordinate2D startCoordinates = YOUR_START_COORDINATES;
CLLocationCoordinate2D endCoordinates = YOUR_END_COORDINATES;

MKPlacemark *startPoint = [[MKPlacemark alloc] initWithCoordinate:startCoordinates];
MKPlacemark *endPoint = [[MKPlacemark alloc] initWithCoordinate:endCoordinates];

MKMapItem *startItem = [[MKMapItem alloc] initWithPlacemark:startPoint];
MKMapItem *endItem = [[MKMapItem alloc] initWithPlacemark:endPoint];

MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];

request.source = startItem;
request.destination = endItem;
request.transportType = MKDirectionsTransportTypeAutomobile; //here you can choose a transport type you need

MKDirections *direction = [[MKDirections alloc] initWithRequest:request];

[direction calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * _Nullable response, NSError * _Nullable error) {

          if (response) {
              for (MKRoute *route in response.routes) {
                  NSLog(@"Distance : %f", route.distance);
              }
          }

 }];

if you have you location as an address, so you can use the method of CLGeocoder, which will give you latitude and longitude of your address

- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;

If you compare a driving distance result using MKDirections with the one using Google Maps, you will see that they differ. I was searching regarding this matter and came across the following link http://www.macworld.co.uk/review/reference-education/apple-maps-vs-google-maps-3464377/

Even though Apple have been improving their map service, they still concede in accuracy to Google (IMO), at least in a question regarding the driving distance. So if accuracy is not highly important in your case, so you can follow along with Apple. Otherwise I would recommend checking Google API.

Syngmaster
  • 415
  • 8
  • 13