Pre iOS 6
Necesita utilizar Core Location para obtener la ubicación actual, pero con ese par lat / long, puede hacer que Maps lo dirija desde allí, a una dirección o ubicación. Al igual que:
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]];
Finalmente, si desea evitar el uso de CoreLocation para encontrar explícitamente la ubicación actual, y desea utilizar la @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"url en su lugar, consulte este enlace que proporcioné en los comentarios a continuación sobre cómo localizar la cadena Current + Location . Sin embargo, está aprovechando otra característica no documentada, y como señala Jason McCreary a continuación, es posible que no funcione de manera confiable en versiones futuras.
Actualización para iOS 6
Originalmente, Maps usaba mapas de Google, pero ahora, Apple y Google tienen aplicaciones de mapas por separado.
1) Si desea enrutar usando la aplicación Google Maps, use el esquema de URL de comgooglemaps :
NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
2) Para usar Apple Maps, puedes usar la nueva MKMapItemclase para iOS 6. Ver los documentos de la API de Apple aquí
Básicamente, usarás algo como esto, si enrutas a las coordenadas de destino ( 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];
Para admitir iOS 6+ y pre iOS 6 en el mismo código, recomendaría utilizar algo como este código que Apple tiene en la MKMapItempágina de documentación de la API:
Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
// iOS 6 MKMapItem available
} else {
// use pre iOS 6 technique
}
Esto supondría que su Xcode Base SDK es iOS 6 (o Último iOS ).