iOS 跳转到地图后导航(高德地图,百度地图,腾讯地图,苹果手机原生的地图)

1.现在info.plist里面如下图所示添加


2.在下图输入框中输入地名,然后点击前往目的地会出现如下图所示。(如果你不知道地方名如何转化为经纬度请看我的另一篇博客:http://blog.csdn.net/chenyongkai1/article/details/51891135)


3.添加下面的代理

UIActionSheetDelegate,CLLocationManagerDelegate


4.下面是最核心代码

先调用下面的方法

- (void)showMapNavigationViewWithtargetLatitude:(double)targetLatitude targetLongitute:(double)targetLongitute toName:(NSString *)name;



4.调用完最核心的代码后下面的所有的主干方法都在在上面的方法执行后都会运行一次。

(NSArray *)checkHasOwnApp{

    NSArray *mapSchemeArr =@[@"iosamap://navi",@"baidumap://map/",@"qqmap://"];

    

    NSMutableArray *appListArr = [[NSMutableArrayalloc] initWithObjects:@"苹果地图",nil];

    

    for (int i =0; i < [mapSchemeArr count]; i++) {

        if ([[UIApplicationsharedApplication] canOpenURL:[NSURLURLWithString:[NSStringstringWithFormat:@"%@",[mapSchemeArrobjectAtIndex:i]]]]) {

            if (i ==0) {

                [appListArr addObject:@"高德地图"];

            }elseif (i == 1){

                [appListArr addObject:@"百度地图"];

            }elseif (i == 2){

                [appListArr addObject:@"腾讯地图"];

            }elseif (i == 3){

                

            }

        }

    }

    

    return appListArr;

}

- (void)showMapNavigationViewFormcurrentLatitude:(double)currentLatitude currentLongitute:(double)currentLongitute TotargetLatitude:(double)targetLatitude targetLongitute:(double)targetLongitute toName:(NSString *)name{

    _currentLatitude = currentLatitude;

    _currentLongitute = currentLongitute;

    _targetLatitude = targetLatitude;

    _targetLongitute = targetLongitute;

    _name = name;

    NSArray *appListArr = [JXMapNavigationViewcheckHasOwnApp];

    NSString *sheetTitle = [NSStringstringWithFormat:@"导航到 %@",name];

    UIActionSheet *sheet;

    if ([appListArrcount] == 1) {

        sheet = [[UIActionSheetalloc] initWithTitle:sheetTitledelegate:selfcancelButtonTitle:@"取消"destructiveButtonTitle:nilotherButtonTitles:appListArr[0],nil];

    }elseif ([appListArr count] ==2) {

        sheet = [[UIActionSheetalloc] initWithTitle:sheetTitledelegate:selfcancelButtonTitle:@"取消"destructiveButtonTitle:nilotherButtonTitles:appListArr[0],appListArr[1],nil];

    }elseif ([appListArr count] ==3){

        sheet = [[UIActionSheetalloc] initWithTitle:sheetTitledelegate:selfcancelButtonTitle:@"取消"destructiveButtonTitle:nilotherButtonTitles:appListArr[0],appListArr[1],appListArr[2],nil];

    }elseif ([appListArr count] ==4){

        sheet = [[UIActionSheetalloc] initWithTitle:sheetTitledelegate:selfcancelButtonTitle:@"取消"destructiveButtonTitle:nilotherButtonTitles:appListArr[0],appListArr[1],appListArr[2],appListArr[3],nil];

    }elseif ([appListArr count] ==5){

        sheet = [[UIActionSheetalloc] initWithTitle:sheetTitledelegate:selfcancelButtonTitle:@"取消"destructiveButtonTitle:nilotherButtonTitles:appListArr[0],appListArr[1],appListArr[2],appListArr[3],appListArr[4],nil];

    }

    sheet.actionSheetStyle =UIActionSheetStyleBlackOpaque;

    [sheet showInView:self];

    

}



#pragma mark-UIActionSheetDelegate

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{

    

    NSString *name =_name;

    

    float ios_version=[[[UIDevicecurrentDevice] systemVersion]floatValue];

    NSString *btnTitle = [actionSheetbuttonTitleAtIndex:buttonIndex];

    

    

    if (buttonIndex ==0) {

        if (ios_version <6.0) {//ios6调用goole网页地图

            NSString *urlString = [[NSStringalloc]

                                  initWithFormat:@"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f&dirfl=d",

                                  _currentLatitude,_currentLongitute,_targetLatitude,_targetLongitute];

            

            NSURL *aURL = [NSURLURLWithString:urlString];

            //打开网页google地图

            [[UIApplicationsharedApplication] openURL:aURL];

        }else{//起点

            CLLocationCoordinate2D from =CLLocationCoordinate2DMake(_currentLatitude,_currentLongitute);

            MKMapItem *currentLocation = [[MKMapItemalloc] initWithPlacemark:[[MKPlacemarkalloc] initWithCoordinate:fromaddressDictionary:nil]];

            currentLocation.name =@"我的位置";

            

            //终点

            CLLocationCoordinate2D to =CLLocationCoordinate2DMake(_targetLatitude,_targetLongitute);

            MKMapItem *toLocation = [[MKMapItemalloc] initWithPlacemark:[[MKPlacemarkalloc] initWithCoordinate:toaddressDictionary:nil]];

            NSLog(@"网页google地图:%f,%f",to.latitude,to.longitude);

            toLocation.name = name;

            NSArray *items = [NSArrayarrayWithObjects:currentLocation, toLocation,nil];

            NSDictionary *options =@{

                                     MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,

                                     MKLaunchOptionsMapTypeKey:

                                          [NSNumbernumberWithInteger:MKMapTypeStandard],

                                     MKLaunchOptionsShowsTrafficKey:@YES

                                     };

            

            //打开苹果自身地图应用

            [MKMapItemopenMapsWithItems:items launchOptions:options];

        }

    }

    if ([btnTitleisEqualToString:@"谷歌地图"]) {

        NSString *urlStr = [NSStringstringWithFormat:@"comgooglemaps://?saddr=%.8f,%.8f&daddr=%.8f,%.8f&directionsmode=transit",_currentLatitude,_currentLongitute,_targetLatitude,_targetLongitute];

        [[UIApplicationsharedApplication] openURL:[NSURLURLWithString:urlStr]];

    }

    elseif ([btnTitle isEqualToString:@"高德地图"]){

        NSString *urlString = [[NSStringstringWithFormat:@"iosamap://path?sourceApplication=applicationName&sid=BGVIS1&slat=%f&slon=%f&sname=%@&did=BGVIS2&dlat=%f&dlon=%f&dname=%@&dev=0&m=0&t=0",_currentLatitude,_currentLongitute,@"我的位置",_targetLatitude,_targetLongitute,_name]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        NSURL *r = [NSURLURLWithString:urlString];

        [[UIApplicationsharedApplication] openURL:r];

        //        NSLog(@"%@",_lastAddress);

        

    }

    

    elseif ([btnTitle isEqualToString:@"腾讯地图"]){

        

        NSString *urlStr = [NSStringstringWithFormat:@"qqmap://map/routeplan?type=drive&fromcoord=%f,%f&tocoord=%f,%f&policy=1",_currentLatitude,_currentLongitute,_targetLatitude,_targetLongitute];

        NSURL *r = [NSURLURLWithString:urlStr];

        [[UIApplicationsharedApplication] openURL:r];

    }

    elseif([btnTitle isEqualToString:@"百度地图"])

    {

        double AdressLat,AdressLon;

        double NowLat,NowLon;

        

        bd_encrypt(_targetLatitude,_targetLongitute, &AdressLat, &AdressLon);

        bd_encrypt(_currentLatitude,_currentLongitute, &NowLat, &NowLon);

        NSString *stringURL = [NSStringstringWithFormat:@"baidumap://map/direction?origin=%f,%f&destination=%f,%f&&mode=driving",NowLat,NowLon,AdressLat,AdressLon];

        NSURL *url = [NSURLURLWithString:stringURL];

        [[UIApplicationsharedApplication] openURL:url];

    }elseif (actionSheet.cancelButtonIndex==buttonIndex){

   //解决点击取消后重复出现选择框的问题

        [actionSheet removeFromSuperview];

        [selfstopLocation];

    }

    

    

    

}

- (void)showMapNavigationViewWithtargetLatitude:(double)targetLatitude targetLongitute:(double)targetLongitute toName:(NSString *)name{

    self.newcllocation=[[CLLocationalloc]init];

    [selfstartLocation];

    _targetLatitude = targetLatitude;

    _targetLongitute = targetLongitute;

    _name = name;

     [selfshowMapNavigationViewFormcurrentLatitude:self.newcllocation.coordinate.latitudecurrentLongitute:self.newcllocation.coordinate.longitudeTotargetLatitude:_targetLatitudetargetLongitute:_targetLongitutetoName:_name];

}

//获取经纬度

-(void)startLocation

{

    if([CLLocationManagerlocationServicesEnabled] && [CLLocationManagerauthorizationStatus] != kCLAuthorizationStatusDenied)

    {

        _manager=[[CLLocationManageralloc]init];

        _manager.delegate=self;

        _manager.desiredAccuracy =kCLLocationAccuracyBest;

        [_managerrequestAlwaysAuthorization];

        _manager.distanceFilter=100;

        [_managerstartUpdatingLocation];

    }

    else

    {

        UIAlertView *alvertView=[[UIAlertViewalloc]initWithTitle:@"提示"message:@"请到设置->隐私,打开定位服务"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles: nil];

        [alvertView show];

    }

    

}

#pragma mark CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

{

    self.newcllocation=newLocation;

   

    

}

- (void)locationManager:(CLLocationManager *)manager

       didFailWithError:(NSError *)error{

    [selfstopLocation];

    

}

-(void)stopLocation

{

    _manager =nil;

}




大家有什么问题可以关注我交流或者给我留言。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/353518.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

高德导航免费,那他靠什么收入?

来源 &#xff5c;一口Linux 一位工作了12年的软件工程师说&#xff1a;当你打开导航时&#xff0c;不需要任何费用&#xff0c;还会给高德公司带来丰厚的收入。当时我不信&#xff0c;去查了相关资料后&#xff0c;才知道这个行业不简单。 出门外出&#xff0c;对路线不熟时&a…

C++编译一些常见的错误集锦

1、段错误&#xff08;Segmentation Fault&#xff09; &#xff08;1&#xff09;段错误&#xff08;Segmentation Fault&#xff09;是一种常见的计算机程序错误&#xff0c;通常指向程序试图访问的内存地址超出了程序可访问的内存范围&#xff0c;或者指针指向了无效的内存…

分布式光伏发电远程监控系统

分布式光伏发电远程监控系统 项目背景 新能源、可再生能源接入电网是智能电网建设的重要组成&#xff0c;也是能源互联网发展的基础。近年来&#xff0c;太阳能光伏发电技术快速发展&#xff0c;光伏发电并网对配电网的影响也不断加深。电网调度人员需要人工参与光伏发电站的发…

短视频矩阵源码技术开发

短视频矩阵是一种常见的视频编码标准&#xff0c;它通过将视频分成多个小块并对每个小块进行压缩来实现高效的视频传输。在本文中&#xff0c;我们将介绍短视频矩阵的原理和实现&#xff0c;并提供示例代码。 $where_time array(); // 时间 $where_time[] array(name>fbr…

运用正则表达式匹配QQ邮箱

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.首先创建一个新文件夹 1.命名好名字后用Visual Studio Code打开 创建一个HTML文档用&#xff01;字符按下tab键后完成基本格式 创建一个input标签占位符写下请输入QQ邮箱再给他一个id方便调用 …

html5form表单提交到QQ邮箱,javaMai+Springl实现给QQ邮箱发邮件(带附件,html格式)...

以前的时候想着java发邮件很简单,因为当时使用的是outlook实现的,有兴趣的可以去看看之前的两篇博客文章,1.使用java底层实现邮件的发送(含测试,源码) 和 2.使用Spring实现邮件的发送(含测试,注释,源码) 就在今天,遇到的需求是给一个QQ邮箱发一份邮件,刚看到需求一看…

Linux向qq邮箱发送html表格以及遇到的问题

由于是实验&#xff0c;做的比较简陋&#xff0c;邮箱直接显示html界面&#xff0c;有诸多要求&#xff0c;本人对html不太擅长&#xff0c;详情可以参考http://www.ruanyifeng.com/blog/2013/06/html_email.html linux向qq发送邮件参考另一篇博客&#xff1a; https://blog.cs…

PGP加密解密QQ邮箱邮件

今天学习了PGP加密解密QQ邮箱邮件的方法&#xff0c;分享一下&#x1f601;&#x1f601;&#x1f601;&#x1f601; 涉及软件&#xff1a;PGP(PGP Desktop)、Outlook(office的) 加密&#xff1a; 第一步&#xff1a;安装PGP软件&#x1f602;&#x1f602;&#x1f602; 具体…

qq邮箱发html版式是乱的,为什么在Word里编辑的内容到QQ邮箱里发给别人是乱的,我用附件发的呀...

为什么在Word里编辑的内容到QQ邮箱里发给别人是乱的,我用附件发的呀以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为什么在Word里编辑的内容到QQ邮箱里发给别人是乱的,我用附件发的呀, 为什么在Word里编辑好的…

ipad查看qq邮箱收件服务器,ipad怎么设置qq邮箱以便通过iPad来接收QQ邮箱收到的邮件...

大家可以通过下文来了解&#xff0c;小编将会演示ipad怎么设置qq邮箱&#xff0c;设置成功之后我们就能通过iPad来接收QQ邮箱收到的邮件&#xff0c;快来操作吧~ 下文是以iPhone设置QQ邮箱为例&#xff0c;和iPad步骤是一样的哦&#xff0c;首先进入“Mail”&#xff0c;点击“…

SpringCloud Gateway网关多路由配置访问404解决方案

文章目录 一、问题描述&#xff1a;SpringCloud GateWay Eureka访问出现404&#xff0c;Not Found二、解决方案:1、 配置 filters: - StripPrefix12、删除冲突依赖3、检查启动类4、检查配置文件 一、问题描述&#xff1a;SpringCloud GateWay Eureka访问出现404&#xff0c…

这才叫软件测试工程师,你那最多是混口饭吃罢了....

前些天和大学室友小聚了一下&#xff0c;喝酒喝大发了&#xff0c;谈天谈地谈人生理想&#xff0c;也谈到了我们各自的发展&#xff0c;感触颇多。曾经找工作我迷茫过、徘徊不&#xff0c;毕业那会我屡屡面试失败&#xff0c;处处碰壁&#xff1b;工作两年后我一度想要升职加薪…

QQ截图快捷键设置

1、打开qq找到主菜单找到设置 2、找到热键----------点击设置热键 3、双击捕捉屏幕进行设置快捷键 然后就OK了。

C#高仿腾讯QQ截图程序

最近把以前制作的截图程序重新写了一下 动了一个大手术 高质量仿照的TX的截图程序 源码下载1(2012-12-09) http://download.csdn.net/detail/crystal_lz/4863320 源码下载2(2012-12-15) http://download.csdn.net/download/crystal_lz/4889763 新改版见&#xff1a;http:/…

【2022-10-19】让Mac QQ自带截图软件单独运行 / 节省大量系统内存 / 快捷截图 / ScreenCapture QQ/ QQ jietu plugin

相信用过Window QQ自带的截图工具的朋友&#xff0c;都会说一句&#xff1a;”真TM好用&#xff01;“&#xff0c;同样Mac QQ也自带了这样一款截图工具&#xff0c;但肯定没Window下这么好用&#xff0c;但是在Mac上应该也是数一数二的&#xff0c;我看了下界面&#xff0c;跟…

QQ截图工具截取

邮箱截图插件 TXGYMailCamera.dll(X86) Export: CameraWindow CameraSubArea CameraWindowLikeSpy 调用参数&#xff1a; rundll32 TXGYMailCamera.dll CameraWindow 微信截图插件 PrScrn.dll(X86) Export: PrScrn 调用参数&#xff1a; rundll32 PrScrn.dll PrScrn 下载地址&…

QQ自带截图功能(你想不到的强大, 必看,长截图/翻译/文本识别/钉在桌面/录屏)

本文是众多使用技巧中其中的一篇, 全部使用技巧点击链接查看, 保证你收获满满 我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题, 有兴趣的可以去 我的主页 了解更多计算机学科的精品思维导图整理 本文可以转载&#xff0c;但请注明来处&#x…

c盘清理软件:清理垃圾、扩大c盘和系统迁移

一、为什么要c盘清理软件 Windows系统采用了NTFS文件系统&#xff0c;这种文件系统特点是有文件碎片和系统产生的临时文件会大量存储到系统盘上&#xff0c;而且在使用电脑的过程中&#xff0c;由于程序的安装、升级、卸载和其他操作会产生大量无用的垃圾文件&#xff0c;这些…

经典好用的软件,不容错过,建议收藏

一、火绒安全软件 之前连这个良心杀毒安全软件都不知道。成立于2011年&#xff0c;一直很低调&#xff0c;很多人都不知道&#xff0c;但真的是良心软件。具有杀毒、防火墙、主动防御三大功能。干净、轻便且功能厉害。同时还有家长模式&#xff0c;控制上网时间、网站、软件等…

算法的深层次知识是数学,这些常用的互联网经典算法应用案例,你知道几个?

前言 在文章初始&#xff0c;我们来思考一个很有意思的问题&#xff1a;一滴水从很高很高的空中自由落体下来&#xff0c;会不会砸伤人&#xff1f; 能够砸伤人则需要水滴具有的动能&#xff0c;即公式&#xff08;1/2&#xff09;mv^2&#xff0c;而水滴的质量是一定的&#…