iOS 6之前的版本
您需要使用“核心位置”来获取当前位置,但是使用该经纬度对,您可以获取“地图”以将您从那里路由到街道地址或位置。像这样:
CLLocationCoordinate2D currentLocation = [self getCurrentLocation];
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字符串。但是,您正在利用另一个未记录的功能,并且正如Jason McCreary在下面指出的那样,它在将来的发行版中可能无法可靠地工作。
iOS 6更新
最初,Google Maps使用Google Maps,但是现在,Apple和Google拥有单独的Maps应用程序。
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
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+和iOS 6之前的版本,我建议使用Apple在MKMapItem
API文档页面上具有的以下代码:
Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
} else {
}
这将假设您的Xcode Base SDK是iOS 6(或最新的iOS)。