Pré iOS 6
Vous devez utiliser Core Localisation pour obtenir l'emplacement actuel, mais avec cette paire lat / long, vous pouvez obtenir des cartes d'itinéraire à partir de là, à une adresse ou l'emplacement. Ainsi:
CLLocationCoordinate2D currentLocation = [self getCurrentLocation];
// this uses an address for the destination. can use lat/long, too with %f,%f format
NSString* address = @"123 Main St., New York, NY, 10001";
NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=%f,%f&daddr=%@",
currentLocation.latitude, currentLocation.longitude,
[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
Enfin, si vous ne voulez éviter d' utiliser CoreLocation pour trouver explicitement l'emplacement actuel, et que vous souhaitez utiliser l' @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"URL au lieu, puis voir ce lien que je fournis dans les commentaires ci - dessous pour savoir comment localiser le + Emplacement chaîne. Cependant, vous prenez avantage d' une autre fonctionnalité non documentée, et comme Jason McCreary indique ci - dessous, il peut ne pas fiable dans les versions ultérieures.
Mise à jour pour iOS 6
A l' origine, carte utilisé Google Maps, mais maintenant, Apple et Google ont des applications de cartes distinctes.
1) Si vous souhaitez itinéraire en utilisant l'application Google Maps, utilisez le schéma d'URL comgooglemaps :
NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
2) d'utiliser des cartes d' Apple, vous pouvez utiliser la nouvelle MKMapItemclasse pour iOS 6. Voir les API d' Apple docs ici
En gros, vous utiliserez quelque chose comme ça, si le routage à destination des coordonnées ( latlong):
MKPlacemark* place = [[MKPlacemark alloc] initWithCoordinate: latlong addressDictionary: nil];
MKMapItem* destination = [[MKMapItem alloc] initWithPlacemark: place];
destination.name = @"Name Here!";
NSArray* items = [[NSArray alloc] initWithObjects: destination, nil];
NSDictionary* options = [[NSDictionary alloc] initWithObjectsAndKeys:
MKLaunchOptionsDirectionsModeDriving,
MKLaunchOptionsDirectionsModeKey, nil];
[MKMapItem openMapsWithItems: items launchOptions: options];
Afin de soutenir à la fois iOS 6 + et iOS 6 avant dans le même code, je vous recommande d' utiliser quelque chose comme ce code que Apple a sur la MKMapItempage doc API:
Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
// iOS 6 MKMapItem available
} else {
// use pre iOS 6 technique
}
Cela suppose que votre Xcode SDK de base est iOS 6 (ou dernier iOS ).