应用跳转百度地图或本机地图导航

项目截图

最近项目要求,详情页有一个公司的地址。点击地址那一栏,会跳出来这个弹出框,跳到相应地图页面进行导航,起点就是用户当前位置,终点就是详情页这个地址,高德和百度默认起点是用户当前位置,目的地需要将详情页地址转为经纬度传过去,话不多说,直接上代码~

1.弹出框

 UIAlertController  *alertCon = [UIAlertController  alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];

        UIAlertAction *AlertAction1 = [UIAlertAction  actionWithTitle:@"高德地图" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            
            [self  zhuan];
            
        }];
        
        UIAlertAction *AlertAction2 = [UIAlertAction  actionWithTitle:@"百度地图" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        
            [self baidu];
            
        }];
        
        
        UIAlertAction *AlertAction3 = [UIAlertAction  actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
            
        }];
        
        [alertCon  addAction:AlertAction1];
        
         [alertCon  addAction:AlertAction2];
        
        [alertCon  addAction:AlertAction3];
        
        [self  presentViewController:alertCon animated:YES completion:nil];

2.跳转到高德地图,需要传目的地的经纬度和名字

//将填写的地址信息拿过来转为经纬度
-(void)zhuan{
    
    //1.获得输入的地址
    NSString *address = self.model.address;
        if (address.length==0) return;
    
         //2.开始地理编码
         //说明:调用下面的方法开始编码,不管编码是成功还是失败都会调用block中的方法
        [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
                //如果有错误信息,或者是数组中获取的地名元素数量为0,那么说明没有找到
                 if (error || placemarks.count==0) {
                      // self.detailAddressLabel.text=@"你输入的地址没找到,可能在月球上";
                    }else   //  编码成功,找到了具体的位置信息
                        {
                                 //打印查看找到的所有的位置信息
                                   /*
                                        61                     name:名称
                                        62                     locality:城市
                                        63                     country:国家
                                        64                     postalCode:邮政编码
                                        65                  */
                                for (CLPlacemark *placemark in placemarks) {
                                        NSLog(@"name=%@ locality=%@ country=%@ postalCode=%@",placemark.name,placemark.locality,placemark.country,placemark.postalCode);
                                     }
                   
                                 //取出获取的地理信息数组中的第一个显示在界面上
                                CLPlacemark *firstPlacemark=[placemarks firstObject];
                                 //详细地址名称
                              // self.detailAddressLabel.text=firstPlacemark.name;
                               //纬度
                              CLLocationDegrees latitude=firstPlacemark.location.coordinate.latitude;
                                //经度
                                CLLocationDegrees longitude=firstPlacemark.location.coordinate.longitude;
                            
                            NSLog(@"%f %f",latitude,longitude);
                            
                            coords2 = CLLocationCoordinate2DMake(latitude,longitude);
                            
                            Xlat =  latitude;
                            
                            Xlong = longitude;
                            
                            [self  gaode];
                            
                           }
           }];

}

-(void)gaode{
    
    //当前的位置 //
    
    //    MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocation];
    
    //起点
    
    //MKMapItem *currentLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:coords1 addressDictionary:nil]];
    
    //目的地的位置
    
    MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:coords2 addressDictionary:nil]];
    
    toLocation.name = self.model.address;
    
    //currentLocation.name = locationName;
    
    NSArray *items = [NSArray arrayWithObjects: toLocation, nil];
    
    NSDictionary *options = @{ MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving, MKLaunchOptionsMapTypeKey: [NSNumber numberWithInteger:MKMapTypeStandard], MKLaunchOptionsShowsTrafficKey:@YES }; //打开苹果自身地图应用,并呈现特定的item
    
    [MKMapItem openMapsWithItems:items launchOptions:options];


}

3.跳转百度,需要传目的地的经纬度和名字

-(void)baidu{
    
    
    BOOL hasBaiduMap = NO;
    
    BOOL hasGaodeMap = NO;
    
    if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"baidumap://map/"]]){
        
        hasBaiduMap = YES;
        
        NSLog(@"yesbaidu");
        
    }else
        
    {
        
        NSLog(@"nobaidu");
        
    }
    
    if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"iosamap://"]]){
        
        hasGaodeMap = YES;
        
    }
    
    //NSString *url2 = [[NSString stringWithFormat:@"baidumap://map/direction?origin=latlng:39.915,116.404|name:我的位置&destination=latlng:39.915,120.202|name:白杨路199弄&mode=driving"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ;
    
    NSString  *url2 = [[NSString  stringWithFormat:@"baidumap://map/direction?origin=latlng:%f|name:我的位置&destination=latlng:%f|name:%@&mode=driving", Xlat, Xlong,self.model.address]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ;
    
    
    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:url2]];

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容