Opens apple maps app from ios app with directions
Here is code to open Map app with directions:
Objective-C Code
NSString* directionsURL = [NSString stringWithFormat:@"http://maps.apple.com/?saddr=%f,%f&daddr=%f,%f",self.mapView.userLocation.coordinate.latitude, self.mapView.userLocation.coordinate.longitude, mapPoint.coordinate.latitude, mapPoint.coordinate.longitude];if ([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString: directionsURL] options:@{} completionHandler:^(BOOL success) {}];} else { [[UIApplication sharedApplication] openURL:[NSURL URLWithString: directionsURL]];}
with the mapPoint is where you want to direction to.
Swift3 or later
let directionsURL = "http://maps.apple.com/?saddr=35.6813023,139.7640529&daddr=35.4657901,139.6201192"guard let url = URL(string: directionsURL) else { return}if #available(iOS 10.0, *) { UIApplication.shared.open(url, options: [:], completionHandler: nil)} else { UIApplication.shared.openURL(url)}
Note that saddr
, daddr
is urlencoded string of location name or location coordinate (about encode URL look at here).
directionsURL
example:
// directions with location coordinate"http://maps.apple.com/?saddr=35.6813023,139.7640529&daddr=35.4657901,139.6201192"// or directions with location name"http://maps.apple.com/?saddr=Tokyo&daddr=Yokohama"// or directions from current location to destination location"http://maps.apple.com/?saddr=Current%20Location&daddr=Yokohama"
More options parameters (like transport type, map type ...) look at here
You can open maps with direction using this code : (assuming your id< MKAnnotation > class has a CLLocationCoordinate2D public property named "coordinate")
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:[annotation coordinate] addressDictionary:nil];MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];[mapItem setName:"WhereIWantToGo"]];NSDictionary *options = @{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving};[mapItem openInMapsWithLaunchOptions:options];
You can also change the button, actually you are using a standard style button :
[UIButton buttonWithType:UIButtonTypeDetailDisclosure];
But you can alloc your custom button with an image or a label :
[[UIButton alloc] initWithImage:[UIImage imageNamed:"directionIcon.png"]];
Here is the working code for showing directions on Apple map. It'll work for current place to your destination place and you just need to pass lat & long of destination place.
double destinationLatitude, destinationLongitude;destinationLatitude=// Latitude of destination place.destinationLongitude=// Longitude of destination place.Class mapItemClass = [MKMapItem class];if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]){ // Create an MKMapItem to pass to the Maps app CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(destinationLatitude,destinationLongitude); MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil]; MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark]; [mapItem setName:@"Name/text on destination annotation pin"]; // Set the directions mode to "Driving" // Can use MKLaunchOptionsDirectionsModeDriving instead NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving}; // Get the "Current User Location" MKMapItem MKMapItem *currentLocationMapItem = [MKMapItem mapItemForCurrentLocation]; // Pass the current location and destination map items to the Maps app // Set the direction mode in the launchOptions dictionary [MKMapItem openMapsWithItems:@[currentLocationMapItem, mapItem] launchOptions:launchOptions];}
Also, share me here, if notice any issue or we need to find out another way to done it.