注意:本文章下的代碼有個別變量未知,因此是不能直接跑通的,我也是轉別人的ios
在IOS6.0系統後,兼容iOS5.0與iOS6.0地圖導航,須要分兩個步驟git
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)//用來獲取手機的系統,判斷系統是多少api
- CLLocationCoordinate2D startCoor = self.mapView.userLocation.location.coordinate;
- CLLocationCoordinate2D endCoor = CLLocationCoordinate2DMake(startCoor.latitude+0.01, startCoor.longitude+0.01);
-
- if (SYSTEM_VERSION_LESS_THAN(@"6.0")) {
-
- NSString *urlString = [[NSString alloc] initWithFormat:@"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f&dirfl=d",startCoor.latitude,startCoor.longitude,endCoor.latitude,endCoor.longitude];
-
- urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
- NSURL *aURL = [NSURL URLWithString:urlString];
- [[UIApplication sharedApplication] openURL:aURL];
- } else {
-
- MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocation];
- MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:endCoor addressDictionary:nil]];
- toLocation.name = @"to name";
-
- [MKMapItem openMapsWithItems:@[currentLocation, toLocation]
- launchOptions:@{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsShowsTrafficKey: [NSNumber numberWithBool:YES]}];
-
- }
若是不想使用蘋果自帶的地圖的話,也可使用第三方的地圖,如百度、Google Maps、高德等app
使用前,先判斷設備上是否已安裝應用ide
百度地圖:ui
if ([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"baidumap://map/"]])google
參考url
高德地圖:spa
if ([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"iosamap://"]]).net
參考
Google Maps:
if ([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"comgooglemaps://"]])
參考
示例代碼
- - (void)availableMapsApps {
- [self.availableMaps removeAllObjects];
-
- CLLocationCoordinate2D startCoor = self.mapView.userLocation.location.coordinate;
- CLLocationCoordinate2D endCoor = CLLocationCoordinate2DMake(startCoor.latitude+0.01, startCoor.longitude+0.01);
- NSString *toName = @"to name";
-
- if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://map/"]]){
- NSString *urlString = [NSString stringWithFormat:@"baidumap://map/direction?origin=latlng:%f,%f|name:個人位置&destination=latlng:%f,%f|name:%@&mode=transit",
- startCoor.latitude, startCoor.longitude, endCoor.latitude, endCoor.longitude, toName];
-
- NSDictionary *dic = @{@"name": @"百度地圖",
- @"url": urlString};
- [self.availableMaps addObject:dic];
- }
- if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
- NSString *urlString = [NSString stringWithFormat:@"iosamap://navi?sourceApplication=%@&backScheme=applicationScheme&poiname=fangheng&poiid=BGVIS&lat=%f&lon=%f&dev=0&style=3",
- @"雲華時代", endCoor.latitude, endCoor.longitude];
-
- NSDictionary *dic = @{@"name": @"高德地圖",
- @"url": urlString};
- [self.availableMaps addObject:dic];
- }
- if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"comgooglemaps://"]]) {
- NSString *urlString = [NSString stringWithFormat:@"comgooglemaps://?saddr=&daddr=%f,%f¢er=%f,%f&directionsmode=transit", endCoor.latitude, endCoor.longitude, startCoor.latitude, startCoor.longitude];
-
- NSDictionary *dic = @{@"name": @"Google Maps",
- @"url": urlString};
- [self.availableMaps addObject:dic];
- }
- }
顯示一個ActionSheet
- [self availableMapsApps];
- UIActionSheet *action = [[UIActionSheet alloc] init];
-
- [action addButtonWithTitle:@"使用系統自帶地圖導航"];
- for (NSDictionary *dic in self.availableMaps) {
- [action addButtonWithTitle:[NSString stringWithFormat:@"使用%@導航", dic[@"name"]]];
- }
- [action addButtonWithTitle:@"取消"];
- action.cancelButtonIndex = self.availableMaps.count + 1;
- action.delegate = self;
- [action showInView:self.view];
實現delegate
- - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
- if (buttonIndex == 0) {
- CLLocationCoordinate2D startCoor = self.mapView.userLocation.location.coordinate;
- CLLocationCoordinate2D endCoor = CLLocationCoordinate2DMake(startCoor.latitude+0.01, startCoor.longitude+0.01);
-
- if (SYSTEM_VERSION_LESS_THAN(@"6.0")) {
-
- NSString *urlString = [[NSString alloc] initWithFormat:@"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f&dirfl=d",startCoor.latitude,startCoor.longitude,endCoor.latitude,endCoor.longitude];
-
- urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
- NSURL *aURL = [NSURL URLWithString:urlString];
- [[UIApplication sharedApplication] openURL:aURL];
- } else{
-
- MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocation];
- MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:endCoor addressDictionary:nil];
- MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:placemark];
- toLocation.name = @"to name";
-
- [MKMapItem openMapsWithItems:@[currentLocation, toLocation]
- launchOptions:@{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsShowsTrafficKey: [NSNumber numberWithBool:YES]}];
-
- }
- }else if (buttonIndex < self.availableMaps.count+1) {
- NSDictionary *mapDic = self.availableMaps[buttonIndex-1];
- NSString *urlString = mapDic[@"url"];
- urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
- NSURL *url = [NSURL URLWithString:urlString];
- DEBUG_LOG(@"\n%@\n%@\n%@", mapDic[@"name"], mapDic[@"url"], urlString);
- [[UIApplication sharedApplication] openURL:url];
- }
- }
- 原文:http://blog.csdn.net/u011011341/article/details/9233049#