Wstępnie iOS 6
Trzeba użyć rdzenia Lokalizacja aby uzyskać bieżącej lokalizacji, ale z tym długość / szerokość geograficzna pary, można uzyskać Maps trasa cię stamtąd, na adres lub lokalizację. Tak:
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]];
Wreszcie, jeśli chcesz uniknąć używania CoreLocation jawnie znaleźć aktualną lokalizację, a chcesz używać @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"zamiast adresu URL, a następnie zobaczyć ten link, że przewidziany w komentarzach poniżej na jak zlokalizować Obecny + położenie ciąg. Jednak wykorzystują inną nieudokumentowanych funkcji i jak Jason McCreary zaznacza poniżej, nie może pracować niezawodnie w przyszłych wydaniach.
Aktualizacja dla systemu iOS 6
Początkowo Mapy wykorzystywane mapy Google, ale teraz, Apple i Google mają oddzielne mapy aplikacje.
1) Jeśli chcesz trasy w aplikacji Mapy Google, należy się comgooglemaps schematu URL :
NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
2) Aby skorzystać z firmy Apple Maps, można korzystać z nowej MKMapItemklasy dla iOS 6. Zobacz docs firmy Apple API tutaj
W zasadzie, można użyć coś jak to, czy trasy do docelowych współrzędnych ( 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];
W celu wspierania zarówno iOS 6+ i pre iOS 6 w tym samym kodzie, polecam korzystania coś takiego kodu, że Apple na MKMapItemstronie API doc:
Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
// iOS 6 MKMapItem available
} else {
// use pre iOS 6 technique
}
To byłoby zakładać, że Xcode Baza SDK iOS 6 (lub Najnowsze iOS ).