Vor iOS 6
Sie müssen Core Location verwenden, um den aktuellen Standort abzurufen. Mit diesem Lat / Long-Paar können Sie jedoch Karten erhalten, mit denen Sie von dort zu einer Adresse oder einem Standort weitergeleitet werden. Wie so:
CLLocationCoordinate2D currentLocation = [self getCurrentLocation];
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]];
Wenn Sie vermeiden möchten, CoreLocation zu verwenden, um den aktuellen Speicherort explizit zu finden, und @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"stattdessen die URL verwenden möchten, lesen Sie diesen Link, den ich in den Kommentaren unten angegeben habe , um die Zeichenfolge Current + Location zu lokalisieren . Sie nutzen jedoch eine andere undokumentierte Funktion, und wie Jason McCreary weiter unten ausführt, funktioniert sie in zukünftigen Versionen möglicherweise nicht zuverlässig.
Update für iOS 6
Ursprünglich verwendeten Maps Google Maps, jetzt haben Apple und Google separate Karten-Apps.
1) Wenn Sie mit der Google Maps-App routen möchten, verwenden Sie das URL-Schema von comgooglemaps :
NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
2) Um Apple Maps zu verwenden, können Sie die neue MKMapItemKlasse für iOS 6 verwenden. Weitere Informationen finden Sie in den Apple API-Dokumenten hier
Grundsätzlich verwenden Sie so etwas, wenn Sie an Zielkoordinaten ( latlong) weiterleiten :
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];
Um sowohl iOS 6+ als auch vor iOS 6 im selben Code zu unterstützen, würde ich empfehlen, so etwas wie diesen Code zu verwenden, den Apple auf der MKMapItemAPI-Dokumentseite hat:
Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
} else {
}
Dies setzt voraus, dass Ihr Xcode Base SDK iOS 6 (oder das neueste iOS ) ist.