iOS 6 Pre
Trebuie să utilizați Core Locul de amplasare pentru a obține locația curentă, dar cu acea pereche lat / lung, puteți obține Hărți Google pentru a vă ruta de acolo, la o adresă sau o locație. Ca astfel:
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]];
În cele din urmă, în cazul în care vă doriți să evitați utilizarea CoreLocation pentru a găsi în mod explicit locația curentă, și doriți să utilizați @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"URL - ul în schimb, atunci vedea acest link pe care am furnizat în comentarii de mai jos pentru modul de a localiza curent + Locul de amplasare șir. Cu toate acestea, sunteți profitând de o altă caracteristică fără acte, și ca Jason McCreary arată mai jos, este posibil să nu funcționeze în mod fiabil în versiunile ulterioare.
Actualizare pentru iOS 6
Inițial, Maps folosit Google Maps, dar acum, Apple și Google au hărți aplicații separate.
1) Dacă doriți să ruta utilizând aplicația Google Maps, utilizați schema URL comgooglemaps :
NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
2) Pentru a utiliza Apple Maps, puteți utiliza noua MKMapItemclasă pentru iOS 6. A se vedea API Docs la Apple aici
Practic, vei folosi ceva de genul asta, în cazul în care de rutare la destinație coordonate ( 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];
Pentru a sprijini atât iOS 6+ și iOS pre 6 în același cod, aș recomanda utilizarea așa ceva cod care Apple are pe MKMapItempagina API doc:
Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
// iOS 6 MKMapItem available
} else {
// use pre iOS 6 technique
}
Acest lucru ar presupune că Xcode Base SDK este iOS 6 (sau Ultimele iOS ).