пред 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, тогда см. Ссылку, которую я предоставил в комментариях ниже , чтобы узнать, как локализуйте строку Current + Location . Однако вы используете еще одну недокументированную функцию, и, как отметил ниже Джейсон МакКрири, в будущих версиях она может работать ненадежно.
Обновление для iOS 6
Изначально Карты использовали карты Google, но теперь Apple и Google имеют отдельные приложения для карт.
1) Если вы хотите выполнить маршрутизацию с помощью приложения Google Maps, используйте схему URL-адреса comgooglemaps :
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. См. Документы Apple API здесь
Как правило, вы будете использовать что-то вроде этого, если маршрутизация к месту назначения координаты (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+ и pre iOS 6 в одном и том же коде, я бы рекомендовал использовать что-то вроде этого кода, который есть у Apple на странице документа API MKMapItem
:
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 ).