(ZT)iOS 调用地图导航
(2014-04-18 16:46:43)在IOS6.0系统后,兼容iOS5.0与iOS6.0地图导航,需要分两个步骤
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)//用来获取手机的系统,判断系统是多少
- CLLocationCoordinate2D
startCoor = self.mapView.userLocation.location.coordinate; - CLLocationCoordinate2D
endCoor = CLLocationCoordinate2DMa ke(startCoor.latitude+0.01, startCoor.longitude+0.01); -
- if
(SYSTEM_VERSION_LESS_THAN(@"6.0")) { // ios6以下,调用google map -
-
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]; -
// @"http://maps.apple.com/?saddr=%f,%f&daddr=%f,%f",startCoor.latitude,startCoor.longitude,endCoor.latitude,endCoor.longitude -
urlString = [urlString stringByAddingPercentEsc apesUsingEncoding:NSUTF8StringEncoding]; -
NSURL *aURL = [NSURL URLWithString:urlString]; -
[[UIApplication sharedApplication] openURL:aURL]; - }
else { // 直接调用ios自己带的apple map -
-
MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocatio n]; -
MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:endCoor addressDictionary:nil]]; -
toLocation.name = @"to name"; -
-
[MKMapItem openMapsWithItems:@[currentLocation, toLocation] -
launchOptions:@{MKLaunchOptionsDirection sModeKey: MKLaunchOptionsDirection sModeDriving,MKLaunchOptionsShowsTraf ficKey: [NSNumber numberWithBool:YES]}]; -
- }
如果不想使用苹果自带的地图的话,也可以使用第三方的地图,如百度、Google Maps、高德等
使用前,先判断设备上是否已安装应用
百度地图:
if
高德地图:
if
Google Maps:
if
示例代码
- -
(void)availableMapsApps { -
[self.availableMaps removeAllObjects]; -
-
CLLocationCoordinate2D startCoor = self.mapView.userLocation.location.coordinate; -
CLLocationCoordinate2D endCoor = CLLocationCoordinate2DMa ke(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];
- -
(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { -
if (buttonIndex == 0) { -
CLLocationCoordinate2D startCoor = self.mapView.userLocation.location.coordinate; -
CLLocationCoordinate2D endCoor = CLLocationCoordinate2DMa ke(startCoor.latitude+0.01, startCoor.longitude+0.01); -
-
if (SYSTEM_VERSION_LESS_THAN(@"6.0")) { // ios6以下,调用google map -
-
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]; -
// @"http://maps.apple.com/?saddr=%f,%f&daddr=%f,%f",startCoor.latitude,startCoor.longitude,endCoor.latitude,endCoor.longitude -
urlString = [urlString stringByAddingPercentEsc apesUsingEncoding:NSUTF8StringEncoding]; -
NSURL *aURL = [NSURL URLWithString:urlString]; -
[[UIApplication sharedApplication] openURL:aURL]; -
} else{// 直接调用ios自己带的apple map -
-
MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocatio n]; -
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:endCoor addressDictionary:nil]; -
MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:placemark]; -
toLocation.name = @"to name"; -
-
[MKMapItem openMapsWithItems:@[currentLocation, toLocation] -
launchOptions:@{MKLaunchOptionsDirection sModeKey: MKLaunchOptionsDirection sModeDriving,MKLaunchOptionsShowsTraf ficKey: [NSNumber numberWithBool:YES]}]; -
-
} -
}else if (buttonIndex < self.availableMaps.count+1) { -
NSDictionary *mapDic = self.availableMaps[buttonIndex-1]; -
NSString *urlString = mapDic[@"url"]; -
urlString = [urlString stringByAddingPercentEsc apesUsingEncoding:NSUTF8StringEncoding]; -
NSURL *url = [NSURL URLWithString:urlString]; -
DEBUG_LOG(@"\n%@\n%@\n%@", mapDic[@"name"], mapDic[@"url"], urlString); -
[[UIApplication sharedApplication] openURL:url]; -
} - }