Предварительно IOS 6
Вы должны использовать Core Location, чтобы получить текущее местоположение, но с этим Широм / парами, вы можете получить карты маршрутизировать вас оттуда, адрес или место. Вот так:
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 вместо этого, то этой ссылки , что я предоставил в комментариях ниже для того, как локализовать ток + Расположение строки. Тем не менее, вы , воспользовавшись другой документировано, и Джейсон McCreary указывает ниже, она не может надежно работать в будущих версиях.
Обновление для IOS 6
Первоначально карта используется Google Maps, но теперь, Apple и Google имеют отдельные карты приложений.
1) Если вы хотите , чтобы маршрут с помощью приложения Google Maps, использовать в 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класс для прошивки 6. См 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 док:
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 (или Latest IOS ).