iOS在APP中调用第三方地图地图(苹果,高德,百度,腾讯)

 

源码地址https://download.csdn.net/download/liuyinghui523/10801074

1.在app中获得定位权限

    <key>NSLocationAlwaysUsageDescription</key>
    <string>根据您的位置来提供服务</string>
    <key>NSLocationUsageDescription</key>
    <string>根据您的位置来提供服务</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>根据您的位置来提供服务</string>

2.把地图应用加入跳转URI白名单

    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>iosamap</string>
        <string>baidumap</string>
        <string>qqmap</string>
    </array>

3.调用方法

- (IBAction)btnPress:(id)sender {
    CLLocationDegrees latitude = 31.178513;
    CLLocationDegrees longitude = 121.494612;
    CLLocationCoordinate2D endLocation = CLLocationCoordinate2DMake(latitude, longitude);
    [self navThirdMapWithLocation:endLocation andTitle:@"世博大道"];
}

-(void)navThirdMapWithLocation:(CLLocationCoordinate2D)endLocation andTitle:(NSString *)titleStr{
    
    NSMutableArray *mapsA = [NSMutableArray array];
    //苹果原生地图方法和其他不一样
    NSMutableDictionary *iosMapDic = [NSMutableDictionary dictionary];
    iosMapDic[@"title"] = @"苹果地图";
    [mapsA addObject:iosMapDic];
    //高德地图
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
        NSMutableDictionary *gaodeMapDic = [NSMutableDictionary dictionary];
        gaodeMapDic[@"title"] = @"高德地图";
        NSString *urlString = [[NSString stringWithFormat:@"iosamap://path?sourceApplication=ios.blackfish.XHY&dlat=%f&dlon=%f&dname=%@&style=2",endLocation.latitude,endLocation.longitude,titleStr] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        gaodeMapDic[@"url"] = urlString;
        [mapsA addObject:gaodeMapDic];
    }
    //百度地图
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
        NSMutableDictionary *baiduMapDic = [NSMutableDictionary dictionary];
        baiduMapDic[@"title"] = @"百度地图";
        NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name:%@&coord_type=gcj02&mode=driving&src=ios.blackfish.XHY",endLocation.latitude,endLocation.longitude,titleStr] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        baiduMapDic[@"url"] = urlString;
        [mapsA addObject:baiduMapDic];
    
    //腾讯地图
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"qqmap://"]]) {
        NSMutableDictionary *qqMapDic = [NSMutableDictionary dictionary];
        qqMapDic[@"title"] = @"腾讯地图";
        NSString *urlString = [[NSString stringWithFormat:@"qqmap://map/routeplan?from=我的位置&type=drive&to=%@&tocoord=%f,%f&coord_type=1&referer={ios.blackfish.XHY}",titleStr,endLocation.latitude,endLocation.longitude] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        qqMapDic[@"url"] = urlString;
        [mapsA addObject:qqMapDic];
      }

    }
    
    //手机地图个数判断
    if (mapsA.count > 0) {
        //选择
        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"使用导航" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
        NSInteger index = mapsA.count;
        
        for (int i = 0; i < index; i++) {
            
            NSString *title = mapsA[i][@"title"];
            NSString *urlString = mapsA[i][@"url"];
            if (i == 0) {
                
                UIAlertAction *iosAntion = [UIAlertAction actionWithTitle:title style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
                    [self appleNaiWithCoordinate:endLocation andWithMapTitle:titleStr];
                }];
                [alertVC addAction:iosAntion];
                continue;
            }
            
            UIAlertAction *action = [UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
            }];
            
            [alertVC addAction:action];
        }
        
        UIAlertAction *cancleAct = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        }];
        [alertVC addAction:cancleAct];

        [self presentViewController:alertVC animated:YES completion:^{
            
        }];
    }else{
        NSLog(@"未检测到地图应用");
    }
}


//唤醒苹果自带导航
- (void)appleNaiWithCoordinate:(CLLocationCoordinate2D)coordinate andWithMapTitle:(NSString *)map_title{
  
    MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocation];
    MKMapItem *tolocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil]];
    tolocation.name = map_title;
    [MKMapItem openMapsWithItems:@[currentLocation,tolocation] launchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
                                                                               MKLaunchOptionsShowsTrafficKey:[NSNumber numberWithBool:YES]}];
}

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

高德官方文档https://lbs.amap.com/api/lightmap/guide/line


版权声明:本文为liuyinghui523原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。