Pré iOS 6
Vous devez utiliser Core Location pour obtenir l'emplacement actuel, mais avec ce couple lat/long, vous pouvez demander à Maps de vous diriger vers une adresse ou un emplacement. Par exemple :
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 souhaitez éviter d'utiliser CoreLocation pour trouver explicitement l'emplacement actuel, et que vous voulez utiliser la méthode @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"
au lieu de l'url, alors voir ce lien que j'ai fourni dans les commentaires ci-dessous pour savoir comment localiser le Actuel+Localisation chaîne. Cependant, vous profitez d'une autre fonctionnalité non documentée, et comme Jason McCreary le souligne ci-dessous, il se peut que cela ne fonctionne pas de manière fiable dans les futures versions.
Mise à jour pour iOS 6
A l'origine, Cartes utilisait Google maps, mais maintenant, Apple et Google ont des applications de cartes séparées.
1) Si vous souhaitez effectuer un itinéraire en utilisant l'application Google Maps, utilisez le schéma URL de comgooglemaps :
NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
2) Pour utiliser Apple Maps, vous pouvez utiliser la nouvelle fonction MKMapItem
pour iOS 6. Voir les documents de l'API Apple ici
Fondamentalement, vous utiliserez quelque chose comme ceci, si le routage vers la destination 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 prendre en charge à la fois iOS 6+ et pré iOS 6 dans le même code, je recommanderais d'utiliser quelque chose comme ce code qu'Apple a mis en place sur le site Web de l'entreprise. MKMapItem
Page de documentation sur l'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 SDK de base Xcode est iOS 6 (ou Dernier iOS ).