iOS App跳转第三方地图和URL参数详解

1:添加白名单

在 info.plist 文件里面,添加一个字段:LSApplicationQueriesSchemes


添加白名单.png

2:跳转到相应App

高德地图
 if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
         NSString *urlString = [[NSString stringWithFormat:@"iosamap://path?sourceApplication=AppName&sid=&sname=%@&did=&dlat=%@&dlon=%@&dname=%@&dev=0&t=0",@"我的位置",lat,lng,@"终点位置"] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString] options:@{} completionHandler:nil];
    }
百度地图
 if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
        NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%@,%@|name:%@&mode=driving&coord_type=bd09ll",lat,lng,@"终点位置"] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString] options:@{} completionHandler:nil];
    }

注意点: 终点名称或经纬度可以同时提供或者提供一个,如果同时存在经纬度和终点位置此时经纬度优先级高,将作为导航依据,名称只负责展示。

3:关于URL

唤起的URL中的参数名和跳转地图后的其他功能展示如:POI(地点)检索等,我给大家整理以下百度和高德SDK文档地址,详细介绍了不同功能对应的唤起URL和通用参数解释:

百度文档地址
高德文档地址

最后

关于使用不同地图SDK获得的经纬度,在跳转第三方地图后有误差的问题,是因为高德和百度使用的坐标系不一样导致;而这里我建议大家使用高德地图SDK定位或者原生的定位功能,因为百度地图使用了BD09ll,高德是GCJ02, 百度url里面有提供参数 coord_type ,把该参数设置为 GCJ02 即可转换坐标系,如果你用的是百度SDK定位获取的经纬度,由于高德方面并没有对应转换的参数,所以这就需要我们自己手动转换比较麻烦了,最后附上百度坐标转高德坐标

/**
 百度坐标转高德坐标

 @param glat 纬度
 @param glon 经度
 @return 数组【转换后的纬度,转换后的经度】
 */
+ (NSArray *)bd09llToGCJLat:(double)glat lon:(double)glon {
    double X_PI = M_PI * 3000.0 / 180.0;
    double x = glon - 0.0065;
    double y = glat - 0.006;
    double z = sqrt(x * x + y * y) - 0.00002 * sin(y * X_PI);
    double theta = atan2(y, x) - 0.000003 * cos(x * X_PI);
    double lat = z * sin(theta);
    double lon = z * cos(theta);
    NSArray *latlon = @[[NSNumber numberWithDouble:lat],[NSNumber numberWithDouble:lon]];
    
    return latlon;
}

你可能感兴趣的:(iOS App跳转第三方地图和URL参数详解)