美文网首页
iOS 第三方地图导航开发与实践

iOS 第三方地图导航开发与实践

作者: 隔壁陈嘉敏 | 来源:发表于2019-06-16 15:12 被阅读0次

当开发简单的地图功能时,我们可以使用集成地图 SDK 来开发相应的功能,但是要开发导航这种复杂的功能时,我们就应该考虑一下专业的地图应用了。而调用第三方地图应用的正确姿势是,只需要通过一个带着导航参数的 URL 链接去打开第三方应用。即方法:

- (BOOL)openURL:(NSURL*)url ;

要进行跳转需要先在 Xcodeinfo.plist 文件内将目标App的url Scheme加入白名单(LSApplicationQueriesSchemes)。

常见第三方地图 App 的 url Scheme

百度地图:baidumap
高德地图:iosamap
腾讯地图:qqmap

info.plist 的白名单设置:
plist 文件新增LSApplicationQueriesSchemes 关键字,类型为NSArray,并在其下添加子目录,类型为NSString,内容为各地图对应的url Scheme

url Scheme 配置

提供参数说明的官网地址:
高德地图:URL Scheme: iosamap://
百度地图:URL Scheme: baidumap://
腾讯地图:URL Scheme: qqmap://

代码实现:
为了方便调用,创建一个对象类来存储地图名称和跳转链接:

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface MapAppInfo : NSObject

@property (nonatomic, strong) NSString *appName;

@property (nonatomic, strong) NSString *mapUrl;

@end

NS_ASSUME_NONNULL_END

根据用户已安装的第三方导航应用来管理数据:

 // 应用名称
NSDictionary *dicInfo = [[NSBundle mainBundle] infoDictionary];
NSString *appName = dicInfo[@"CFBundleDisplayName"];

NSMutableArray *arrmTemp = [NSMutableArray arrayWithCapacity:100];
//  高德地图
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
    
    MapAppInfo *mapInfo = [MapAppInfo new];
    [mapInfo setAppName:@"高德地图"];
    
    NSMutableString *strmUrl = [NSMutableString stringWithFormat:@"iosamap://path?sourceApplication=%@", appName];
    
    // 目的地
    [strmUrl appendFormat:@"&dname=%@", @"深圳市民中心"];
    
    // 目的地的火星坐标
    [strmUrl appendFormat:@"&dlat=%@&dlon=%@", @"22.5", @"114.0"];
    
    // t = 0(驾车)= 1(公交)= 2(步行)= 3(骑行)= 4(火车)= 5(长途客车)
    [strmUrl appendFormat:@"&t=%@", @"2"];
    
    [strmUrl appendFormat:@"&dev=0"];
    mapInfo.mapUrl = strmUrl;
    [arrmTemp addObject:mapInfo];
}

// 百度地图
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
    
    MapAppInfo *mapInfo = [MapAppInfo new];
    [mapInfo setAppName:@"百度地图"];
    
    NSMutableString *strmUrl = [NSMutableString stringWithFormat:@"baidumap://map/direction?"];
    
    // 目的地名称及火星坐标
    [strmUrl appendFormat:@"destination=name:%@|latlng:%@,%@&", @"深圳市民中心", @"22.5", @"114.0"];
    
    // 方式
    [strmUrl appendFormat:@"mode=%@&", @"walking"];
    
    // 火星坐标
    [strmUrl appendFormat:@"coord_type=gcj02&"];

    // 应用名称
    [strmUrl appendFormat:@"src=ios.%@", appName];
    mapInfo.mapUrl = strmUrl;
    [arrmTemp addObject:mapInfo];
}

// 腾讯地图
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"qqmap://"]]) {
    
    MapAppInfo *mapInfo = [MapAppInfo new];
    [mapInfo setAppName:@"腾讯地图"];
    
    // 注:以我的位置为起点时,需要加入 “from=我的位置”,否则跳转之后的起点位置为待输入状态
    NSMutableString *strmUrl = [NSMutableString stringWithFormat:@"qqmap://map/routeplan?from=我的位置&"];
    
    // 目的地
    [strmUrl appendFormat:@"to=%@&", @"深圳市民中心"];

    // 目的地的火星坐标
    [strmUrl appendFormat:@"tocoord=%@,%@&", @"22.5", @"114.0"];
    
    // 交通方式
    [strmUrl appendFormat:@"type=%@&", @"walk"];
    
    [strmUrl appendFormat:@"referer=%@", @"5ZABZ-6N4K5-F7EIZ-QUKIR-PC5IT-46BYM"];
    mapInfo.mapUrl = strmUrl;
    [arrmTemp addObject:mapInfo];
}

self.arrMapScheme = arrmTemp;

最后,在调用时,我们的起点和目的地由于使用了中文,所以需要发起调用的时候,将 URL 转为 UTF-8 的格式:

NSString *strURL = self.arrMapScheme[0].mapUrl;
strURL = [strURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:strURL]];
    [self cancelAction];

就是这样了!

相关文章

  • 地图导航

    URI跳转方式地图导航的代码实践iOS调用第三方地图路线导航IOS实现应用内打开第三方地图app进行导航 高德 i...

  • 2019-03-26

    iOS 调起第三方地图导航

  • iOS 第三方地图导航开发与实践

    当开发简单的地图功能时,我们可以使用集成地图 SDK 来开发相应的功能,但是要开发导航这种复杂的功能时,我们就应该...

  • ios开发使用的第三方资料

    ios开发使用的第三方资料 自己搜索使用过的一些资料,仅供参考。 室内地图-室内三维地图引擎导航及制作|易景地图:...

  • iOS跳转第三方地图导航

    在iOS开发应用过程中,会遇到跳转第三方应用地图进行导航的场景,例如跳转到高德地图,百度地图.如图所示 首先,如果...

  • 开发问题笔记(十三)

    目录 1.App内打开第三方地图进行导航 1.App内打开第三方地图进行导航 App内打开第三方地图进行导航;举例...

  • IOS地图定位导航

    title : IOS地图定位导航category : UI 地图定位导航 标签(空格分隔): IOS 概述 I...

  • RN-地图导航

    调起百度网页地图路径导航 调起高德网页地图路径导航 iOS调起百度APP地图路径导航 iOS调起高德app地图路径...

  • 最详细的iOS应用内调用第三方地图进行导航

    iOS应用内调用第三方地图进行导航看我这篇就够了,所有的问题都能在这里找到答案 调用第三方地图主要是分三步 1、配...

  • iOS开发·runtime原理与实践: 基本知识篇

    iOS开发·runtime原理与实践: 基本知识篇 iOS开发·runtime原理与实践: 基本知识篇

网友评论

      本文标题:iOS 第三方地图导航开发与实践

      本文链接:https://www.haomeiwen.com/subject/pbvttctx.html