iOS 6 Pre
È necessario utilizzare Core Location per ottenere la posizione corrente, ma con quella coppia lat / lungo, è possibile ottenere mappe a voi percorso da lì, a un indirizzo stradale o di posizione. Così:
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]];
Infine, se si vuole evitare di utilizzare CoreLocation per trovare in modo esplicito la posizione corrente, e si desidera utilizzare l' @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"URL invece, allora vedere questo link che ho fornito nei commenti qui sotto per informazioni su come localizzare il + posizione corrente di stringa. Tuttavia, si sta approfittando di un'altra funzionalità non documentata, e come sottolinea Jason McCreary qui di seguito, potrebbe non funzionare in modo affidabile nelle versioni future.
Aggiornamento per iOS 6
In origine, mappe utilizzate le mappe di Google, ma ora, Apple e Google hanno APPLICAZIONI MAPPE separati.
1) Se si desidera rotta utilizzando l'app Google Maps, utilizzare lo schema URL comgooglemaps :
NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
2) utilizzare le mappe di Apple, è possibile utilizzare la nuova MKMapItemclasse per iOS 6. Vedere la documentazione API di Apple qui
In sostanza, si utilizzerà una cosa del genere, se il routing di destinazione coordinate ( 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];
Al fine di supportare sia iOS 6+ e iOS 6 pre nello stesso codice, mi consiglia di utilizzare qualcosa di simile a questo codice che Apple ha sul MKMapItempagina di API doc:
Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
// iOS 6 MKMapItem available
} else {
// use pre iOS 6 technique
}
Questo sarebbe scontato che il vostro Xcode Base SDK è iOS 6 (o più recenti di iOS ).