注意:本文章下的代码有个别变量未知,所以是不能直接跑通的,我也是转别人的

在IOS6.0系统后,兼容iOS5.0与iOS6.0地图导航,需要分两个步骤

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)//用来获取手机的系统,判断系统是多少

  1. CLLocationCoordinate2D startCoor = self.mapView.userLocation.location.coordinate;
  2. CLLocationCoordinate2D endCoor = CLLocationCoordinate2DMake(startCoor.latitude+0.01, startCoor.longitude+0.01);
  3. if (SYSTEM_VERSION_LESS_THAN(@"6.0")) { // ios6以下,调用google map
  4. 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];
  5. //        @"http://maps.apple.com/?saddr=%f,%f&daddr=%f,%f",startCoor.latitude,startCoor.longitude,endCoor.latitude,endCoor.longitude
  6. urlString =  [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  7. NSURL *aURL = [NSURL URLWithString:urlString];
  8. [[UIApplication sharedApplication] openURL:aURL];
  9. } else { // 直接调用ios自己带的apple map
  10. MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocation];
  11. MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:endCoor addressDictionary:nil]];
  12. toLocation.name = @"to name";
  13. [MKMapItem openMapsWithItems:@[currentLocation, toLocation]
  14. launchOptions:@{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsShowsTrafficKey: [NSNumber numberWithBool:YES]}];
  15. }

如果不想使用苹果自带的地图的话,也可以使用第三方的地图,如百度、Google Maps、高德等

使用前,先判断设备上是否已安装应用

百度地图:

if ([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"baidumap://map/"]])

参考

高德地图:

if ([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"iosamap://"]])

参考

Google Maps:

if ([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"comgooglemaps://"]])

参考

示例代码

  1. - (void)availableMapsApps {
  2. [self.availableMaps removeAllObjects];
  3. CLLocationCoordinate2D startCoor = self.mapView.userLocation.location.coordinate;
  4. CLLocationCoordinate2D endCoor = CLLocationCoordinate2DMake(startCoor.latitude+0.01, startCoor.longitude+0.01);
  5. NSString *toName = @"to name";
  6. if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://map/"]]){
  7. NSString *urlString = [NSString stringWithFormat:@"baidumap://map/direction?origin=latlng:%f,%f|name:我的位置&destination=latlng:%f,%f|name:%@&mode=transit",
  8. startCoor.latitude, startCoor.longitude, endCoor.latitude, endCoor.longitude, toName];
  9. NSDictionary *dic = @{@"name": @"百度地图",
  10. @"url": urlString};
  11. [self.availableMaps addObject:dic];
  12. }
  13. if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
  14. NSString *urlString = [NSString stringWithFormat:@"iosamap://navi?sourceApplication=%@&backScheme=applicationScheme&poiname=fangheng&poiid=BGVIS&lat=%f&lon=%f&dev=0&style=3",
  15. @"云华时代", endCoor.latitude, endCoor.longitude];
  16. NSDictionary *dic = @{@"name": @"高德地图",
  17. @"url": urlString};
  18. [self.availableMaps addObject:dic];
  19. }
  20. if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"comgooglemaps://"]]) {
  21. NSString *urlString = [NSString stringWithFormat:@"comgooglemaps://?saddr=&daddr=%f,%f¢er=%f,%f&directionsmode=transit", endCoor.latitude, endCoor.longitude, startCoor.latitude, startCoor.longitude];
  22. NSDictionary *dic = @{@"name": @"Google Maps",
  23. @"url": urlString};
  24. [self.availableMaps addObject:dic];
  25. }
  26. }

显示一个ActionSheet

  1. [self availableMapsApps];
  2. UIActionSheet *action = [[UIActionSheet alloc] init];
  3. [action addButtonWithTitle:@"使用系统自带地图导航"];
  4. for (NSDictionary *dic in self.availableMaps) {
  5. [action addButtonWithTitle:[NSString stringWithFormat:@"使用%@导航", dic[@"name"]]];
  6. }
  7. [action addButtonWithTitle:@"取消"];
  8. action.cancelButtonIndex = self.availableMaps.count + 1;
  9. action.delegate = self;
  10. [action showInView:self.view];

实现delegate

      1. - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
      2. if (buttonIndex == 0) {
      3. CLLocationCoordinate2D startCoor = self.mapView.userLocation.location.coordinate;
      4. CLLocationCoordinate2D endCoor = CLLocationCoordinate2DMake(startCoor.latitude+0.01, startCoor.longitude+0.01);
      5. if (SYSTEM_VERSION_LESS_THAN(@"6.0")) { // ios6以下,调用google map
      6. 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];
      7. //        @"http://maps.apple.com/?saddr=%f,%f&daddr=%f,%f",startCoor.latitude,startCoor.longitude,endCoor.latitude,endCoor.longitude
      8. urlString =  [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
      9. NSURL *aURL = [NSURL URLWithString:urlString];
      10. [[UIApplication sharedApplication] openURL:aURL];
      11. } else{// 直接调用ios自己带的apple map
      12. MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocation];
      13. MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:endCoor addressDictionary:nil];
      14. MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:placemark];
      15. toLocation.name = @"to name";
      16. [MKMapItem openMapsWithItems:@[currentLocation, toLocation]
      17. launchOptions:@{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsShowsTrafficKey: [NSNumber numberWithBool:YES]}];
      18. }
      19. }else if (buttonIndex < self.availableMaps.count+1) {
      20. NSDictionary *mapDic = self.availableMaps[buttonIndex-1];
      21. NSString *urlString = mapDic[@"url"];
      22. urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
      23. NSURL *url = [NSURL URLWithString:urlString];
      24. DEBUG_LOG(@"\n%@\n%@\n%@", mapDic[@"name"], mapDic[@"url"], urlString);
      25. [[UIApplication sharedApplication] openURL:url];
      26. }
      27. }
      28. 原文:http://blog.csdn.net/u011011341/article/details/9233049#

iOS开发----调用地图导航的更多相关文章

  1. IOS开发之地图导航

    一.问题描述 现在很多的APP 都开始引入了地图和定位功能,包括一些餐饮业,团购等.他们都过定位和地图来让用户更加方便的根据自己的位置找到合适的目标,也就是说,现在地图定位已经不再是导航工具类,地图工 ...

  2. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

  3. iOS 调用地图导航

    在IOS6.0系统后,兼容iOS5.0与iOS6.0地图导航,需要分两个步骤 #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevic ...

  4. iOS开发系列--地图与定位

    概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...

  5. 转-iOS开发系列--地图与定位

    来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功 ...

  6. iOS开发系列--地图与定位总结

    现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的 ...

  7. IOS开发中设置导航栏主题

    /** * 系统在第一次使用这个类的时候调用(1个类只会调用一次) */ + (void)initialize { // 设置导航栏主题 UINavigationBar *navBar = [UINa ...

  8. iOS开发中地图开发的简单应用

    iOS上使用地图比Android要方便,只需要新建一个MKMapView,addSubView即可.这次要实现的效果如下: 有标注(大头针),定位,地图. 1.添加地图 1.1 新一个Single V ...

  9. IOS 手绘地图导航

    手绘地图导航 第三方库 NAMapKit, 1)支持在手绘图上标记.缩放 2)支持在单张图片 3)支持瓦片小图片 思路 前提:美工已经切好手绘图,并告知我们当前的缩放级别. 1)确定好手绘图左上角点在 ...

随机推荐

  1. NVelocity 表格行奇偶样式变换

    #foreach($test in $tests) #even <tr class="Test1"> #odd <tr class="Test2&quo ...

  2. 钩子机制(hook)

    钩子是编程惯用的一种手法,用来解决一种或多种特殊情况的处理. 简单来说,钩子就是适配器原理,或者说是表驱动原理,我们预先定义了一些钩子,在正常的代码逻辑中使用钩子去适配一些特殊的属性,样式或事件,这样 ...

  3. verilog中的for循环问题

    module mult_for(outcome,a,b);parameter SIZE=8;input[SIZE:1] a,b;output reg[2*SIZE:1] outcome;integer ...

  4. python 高阶函数与装饰器

    高阶函数定义1.函数接收的参数是一个函数名2.函数的返回值是一个函数名以上两者满足任意一个,就是高阶函数装饰器定义本质就是函数,功能是为其他函数添加新功能 装饰器的原则 1.不修改被装饰函数的源代码( ...

  5. [Shell]Bash变量:变量测试与内容替换

    --------------------------------------------------------------------------------------------- 变量测试是通 ...

  6. 【java】:定时任务

    PS:转 http://blog.csdn.net/lotusyangjun/article/details/6450421/

  7. 搭建三层架构(ASP.NET MVC+EF)

    昨天面试的时候最后做了一道上机题,竟然跪了,跪就跪在没有搭好框架,连接数据库总是程序报错. 回来之后亲自搭了一下框架,弄好后放到博客上.下图就是搭建好后,整个框架的结构就是这样,下面对框架中的文件进行 ...

  8. 传值 属性 block 单例 协议

    界面传值 四种传值的方式 1.属性传值(从前往后) 步骤: 1.属性传值用于第一个界面向第二个界面传值 2.明确二者联系的桥梁,也就是触发跳转的地方 3.明确传输的值,类型是什么 4.在第二个视图控制 ...

  9. 1606: [Usaco2008 Dec]Hay For Sale 购买干草

    Description     约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草.  顿因有H(1≤H≤5000)包 ...

  10. myeclipse2013以及以后的最新版各种破解(其实就是获取活跃码而已)

    当你下到最新版的myeclipse-blue的时候你是否会为注册激活而烦恼呢,别担心,其实激活也就那么点事儿,请遵循我如下做法就可以了: 免积分下载破解地址 http://download.csdn. ...