Προ iOS 6
Θα πρέπει να χρησιμοποιήσετε πυρήνα Τοποθεσία για να πάρει την τρέχουσα θέση, αλλά με αυτό το γεωγραφικό πλάτος / μήκος ζευγάρι, μπορείτε να πάρετε χάρτες για να σας διαδρομή από εκεί, σε μια ταχυδρομική διεύθυνση ή την τοποθεσία. Όπως αυτό:
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]];
Τέλος, αν θέλετε να αποφύγετε τη χρήση CoreLocation να βρείτε ρητά την τρέχουσα θέση, και θέλετε να χρησιμοποιήσετε το @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"url αντ 'αυτού, τότε δείτε αυτό το σύνδεσμο που παρέχεται στα σχόλια παρακάτω για το πώς να εντοπίσουν την Τρέχουσα + Τοποθεσία εγχόρδων. Ωστόσο, θα εκμεταλλεύονται άλλο χωρίς χαρτιά λειτουργία, και ως Jason McCreary επισημαίνει στη συνέχεια, μπορεί να μην λειτουργεί αξιόπιστα σε μελλοντικές εκδόσεις.
Ενημέρωση για το iOS 6
Αρχικά, Χάρτες χρησιμοποιείται το Google Maps, αλλά τώρα, η Apple και η Google έχουν ξεχωριστές χάρτες εφαρμογές.
1) Αν θέλετε να διαδρομή χρησιμοποιώντας την εφαρμογή Χάρτες Google, χρησιμοποιήστε το πρόγραμμα comgooglemaps URL :
NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
2) Για να χρησιμοποιήσετε την Apple Maps, μπορείτε να χρησιμοποιήσετε τη νέα MKMapItemκατηγορία για το iOS 6. Δείτε τα docs API της Apple εδώ
Βασικά, θα χρησιμοποιήσει κάτι τέτοιο, αν δρομολόγησης για τον προορισμό συντεταγμένες ( 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];
Για να υποστηρίξει τόσο το iOS 6+ και προ iOS 6 με τον ίδιο κωδικό, θα ήθελα να συστήσω χρησιμοποιώντας κάτι σαν αυτό το κώδικα που η Apple έχει στην MKMapItemσελίδα API doc:
Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
// iOS 6 MKMapItem available
} else {
// use pre iOS 6 technique
}
Αυτό θα υποθέσουμε ότι Xcode Base SDK σας είναι iOS 6 (ή Τελευταία iOS ).