首页 > 其他分享 >ios开发之--条用第三方地图路线导航

ios开发之--条用第三方地图路线导航

时间:2023-08-22 11:41:51浏览次数:41  
标签:地图 title -- 条用 self ios maps NSString urlString

项目里面有位置功能,需要有导航,导航两种实现方式 (集成第三方SDK、URL跳转第三方应用) ,直接集成就不说,下面来说下通过url跳转,

最终效果如如下:

ios开发之--条用第三方地图路线导航_ios

 

 如果手机上安装的有客户端就展示,没有就不展示,文档上面写的很详细的,具体地址如下:

高德地图:https://lbs.amap.com/api/amap-mobile/guide/ios/navi

百度地图:http://lbsyun.baidu.com/index.php?title=uri/api/ios

腾讯地图:http://lbs.qq.com/uri_v1/guide-mobile-navAndRoute.html

国内用的暂时就这些,不过需要注意的是,腾讯地图有一个参数需要注册平台开发者账号才能使用,参数还是必传的,如下图:

ios开发之--条用第三方地图路线导航_腾讯地图_02

具体实现代码如下:

一、添加白名单

ios开发之--条用第三方地图路线导航_ios_03

 

 二、具体实现代码如下:

-(void)getOpenURL
{
    [self getInstalledMapAppWithEndLocation:destinationCoordinate2D];
    for (int i = 0; i < self.maps.count; i ++) {
        NSString *title = [NSString stringWithFormat:@"%@",self.maps[i][@"title"]];
        [_titleMaps addObject:title];
    }
}

 

#pragma mark 一键导航
- (IBAction)navigationAction:(id)sender {
    
    // 实例方法
    LCActionSheet *sheet = [[LCActionSheet alloc] initWithTitle:@"请选择地图"
                                                   buttonTitles:_titleMaps
                                                 redButtonIndex:-1
                                                       delegate:self];
    [sheet show];
}

-(void)actionSheet:(LCActionSheet *)actionSheet didClickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != -1) {
        if (buttonIndex == 0) {
            [self navAppleMap];
            return;
        }
        NSDictionary *dic = self.maps[buttonIndex];
        NSString *urlString = dic[@"url"];
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
    }
}

//苹果地图
- (void)navAppleMap
{
    CLLocationCoordinate2D gps = [JZLocationConverter bd09ToWgs84:destinationCoordinate2D];
    
    MKMapItem *currentLoc = [MKMapItem mapItemForCurrentLocation];
    MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:gps addressDictionary:nil]];
    NSArray *items = @[currentLoc,toLocation];
    NSDictionary *dic = @{
                          MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving,
                          MKLaunchOptionsMapTypeKey : @(MKMapTypeStandard),
                          MKLaunchOptionsShowsTrafficKey : @(YES)
                          };
    
    [MKMapItem openMapsWithItems:items launchOptions:dic];
}

#pragma mark - 导航方法
- (NSArray *)getInstalledMapAppWithEndLocation:(CLLocationCoordinate2D)endLocation
{
    //苹果地图
    NSMutableDictionary *iosMapDic = [NSMutableDictionary dictionary];
    iosMapDic[@"title"] = @"苹果地图";
    [self.maps addObject:iosMapDic];
    
    //百度地图
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
        NSMutableDictionary *baiduMapDic = [NSMutableDictionary dictionary];
        baiduMapDic[@"title"] = @"百度地图";
        NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin=我的位置&destination=%f,%f&mode=driving&src=webapp.navi.yourCompanyName.yourAppName",endLocation.latitude,endLocation.longitude] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        baiduMapDic[@"url"] = urlString;
        [self.maps addObject:baiduMapDic];
    }
    
    
    //高德地图
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
        NSMutableDictionary *gaodeMapDic = [NSMutableDictionary dictionary];
        gaodeMapDic[@"title"] = @"高德地图";
        
        NSString *urlString = [[NSString stringWithFormat:@"iosamap://navi?sourceApplication=applicationName&poiname=fangheng&poiid=BGVIS&lat=%f&lon=%f&dev=1&style=2",endLocation.latitude,endLocation.longitude] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        gaodeMapDic[@"url"] = urlString;
        [self.maps addObject:gaodeMapDic];
    }
    
    
    //腾讯地图
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"qqmap://"]]) {
        NSMutableDictionary *qqMapDic = [NSMutableDictionary dictionary];
        qqMapDic[@"title"] = @"腾讯地图";
        NSString *urlString = [[NSString stringWithFormat:@"qqmap://map/routeplan?type=drive&from=我的位置&to=洗车点&tocoord=%f,%f&referer=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77",endLocation.latitude,endLocation.longitude] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        qqMapDic[@"url"] = urlString;
        [self.maps addObject:qqMapDic];
    }
    
    return self.maps;
}

然后直接调用getOpenURL方法即可,传经纬度是用CLLocationCoordinate2D直接传的,展示用的是大神写好的第三方库:LCActionSheet,上面的代码可以直接使用,亲测有效!如果变动,请以文档为准!


作者:稻草人11223


标签:地图,title,--,条用,self,ios,maps,NSString,urlString
From: https://blog.51cto.com/u_13188203/7187417

相关文章

  • ios开发之--WKWebView的使用
    WKWebView是ios8出来的,是为了解决UIWebView卡慢,占用内存过大的问题。在以往时候,如果用UIWebView加载加载网页的时候,卡慢现象会很严重,有时候往往会卡到一个页面无法动弹,空白屏时间过长,基本上没有什么体验可言;WebKit中的WKWebView控件的新特性和使用方法,较好的解决了卡、慢、占用内......
  • ios开发之--数组的一些操作
    1,创建数组NSMutableArray*array=[[NSMutableArrayalloc]initWithObjects:@"a",@"b",@"c",nil];NSMutableArray*array1=[NSMutableArrayarrayWithObjects:@"a",@"b",@"c",nil];NSArray*array2=@......
  • ios开发之--tableview刷新某一个区和某一行
    在开发中,有时候,我们不需要刷新整个表,只需要刷新局部数据即可,具体代码如下://section刷新NSIndexSet*indexSet=[[NSIndexSetalloc]initWithIndex:2];[tableviewreloadSections:indexSetwithRowAnimation:UITableViewRowAnimationAutomatic];//cell刷新NSInde......
  • iOS开发之-- 字符串的操作,去掉某一个字符或者替换成其他字符
    一个简单的操作,记录下:NSString*strUrl=[urlStringstringByReplacingOccurrencesOfString:@""withString:@""];去掉空格NSString*strUrl=[urlStringstringByReplacingOccurrencesOfString:@""withString:@"/"];替换字符 仅做记录!作者:稻草人11......
  • ios开发之--首页 导航栏隐藏 下一级页面显示,pop回来显示白条
    解决方法,在首页中实现如下两个方法,代码如下:-(void)viewWillDisappear:(BOOL)animated{[superviewWillDisappear:animated];[self.navigationControllersetNavigationBarHidden:NOanimated:NO];}-(void)viewWillAppear:(BOOL)animated{[superviewWillAppear......
  • ios开发之--新手引导页图片适配方案
    1,图片适配,最早以前是自己命名规范,例如@1x,@2x,@3x等,3套图基本上就够用了2,在iPhoneX之后,需要适配的图就多了,因为分辨率增多了,屏幕尺寸也增多了3,尺寸:640*960,640*1136,750*1334,1242*2208,1125*24364,方案:a、判断,代码如下:#defineIS_IPHONE4([UIScreenmainScreen].bounds.size.height<56......
  • ios开发之--UIButton中imageView和titleLabel的位置调整
    在使用UIButton时,有时候需要调整按钮内部的imageView和titleLabel的位置和尺寸。在默认情况下,按钮内部的imageView和titleLabel的显示效果是图片在左文字在右,然后两者紧挨在一起构成组合居中显示。如下图:我们可以使用setImageEdgeInsets:和setTitleEdgeInsets:方法来调整两者的位置......
  • ios开发之 -- NSString指定字体高亮显示
    一个简单的小需求,就是在一个字符串里面,指定一部分字节高亮显示,代码如下:NSString*descStr=@"需要高亮显示的字符";NSString*nickStr=[NSStringstringWithFormat:@"%@%@",@"这里是高亮显示以外的字符",descStr];NSMutableAttributedString*attrStr=[[NSMutabl......
  • ios开发之--使用xib适配iPhone X
    最近在修改一个老项目,里面有很多xib文件,需要适配iPhoneX,但是又不想重写页面用代码适配,分享个小方法,也算是个笨办法吧,适配iPhoneX底部,iPhoneX底部有34px的操作区域,而其他机型的则是没有的,具体步骤如下:1、2、3、双击上图箭头所指,进入如下界面:  然后,就可以了!上面导航适配,目前我还......
  • knn 算法的实现原理是怎样的
    K最近邻(K-NearestNeighbors,简称KNN)算法是一种用于分类和回归的基本机器学习算法。其原理是基于样本之间的距离度量,通过找出离待预测样本最近的K个训练样本,利用这K个样本的标签信息进行分类或回归预测。主要思想就是物以类聚人以群分的思想,关键就是KNN中K近邻中K的确定,和距离的定义......