点击导航按钮后进入百度地图app,如果手机没有安装的话,就跳转到AppStore

调用第三方地图app导航(高德、百度、腾讯) 调用第三方地图应用导航 阅读详情

之前介绍了我正在做的是一款定位主打的应用。然后最近我们需要做一个定位导航的功能,能够让用户从当前位置导航到指定目的地(默认以驾车的方式导航)。

手机上的导航方式,分应用内导航和应用外导航:

  • 应用内导航

是指使用地图服务提供的SDK(比如高德,百度等等),直接将导航功能嵌入到我们自己的APP内部

但是这个方案我个人不喜欢,一是接入要一定的时间,二是增加APP的内存占用

  • 应用外导航

是以URI跳转的方式(在iOS中就是以URL Scheme的方式),直接跳到对应的地图APP中,直接利用对方的功能来导航。

这样的优点,一是接入方便,二是不增加自己APP的开销;缺点就是如果用户没有装这个地图应用就没办法使用这个地图的服务。

说起应用内导航,当年是被图吧坑惨了。两年前,高德和百度都没有推出导航SDK的时候,市面上好像就只有图吧有应用内导航SDK,所以不得已用了图吧SDK。如今图吧SDK仍是我心中最难用的地图SDK(话说百度的SDK和图吧的SDK设计感觉上是一脉相承的,不晓得是不是百度做地图时挖了一大批图吧的人?),而且就是这个难用的SDK,竟然还是收费的。

而今天要说的,就是第二种。因为网上说的都不是很全面,所以今天把对这种方式的研究结果总结一下。

研究

先来看一下我们要达到什么效果,就是当我们点导航的时候,会弹出下面这个选择列表。

blob.png

当然,如果没有安装某个地图APP,那么对应的选项是不会出现的。检测APP是否安装,只要调用下面这个方法就可以了

[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"appurlscheme://"]

关于APP的URL Scheme相关内容这里就不介绍了,大家可以自行去研究

那么我们上图提到了4个地图应用,分别是:

  1. 苹果地图

  2. 百度地图

  3. 高德地图

  4. 谷歌地图

这些也是当前我们用得最多的几种地图了(什么,你们说还有腾讯地图? 可惜腾讯地图暂时还不支持URI的方式打开,所以这里就没列出来,等可以用了我会补上)

下面来对比一下几种地图:

地图URL Scheme文档是否可以跳回到APP
苹果地图 文档否
百度地图baidumap://文档否
高德地图iosamap://文档是
谷歌地图comgooglemaps://文档是

苹果地图是系统自带的(而且苹果地图最好的方式也不是用URI的方式开打),所以无需URL Scheme就可以打开的。

其次,当跳到地图APP之后可以跳回是一种很好的体验(参考微信的跳转)。但是遗憾的是,苹果地图和百度地图都不支持跳回。

接下来我们就回到正题,说一说每种地图的跳转方式。

假设我们有一个指定的目的坐标coordinate,而我们自己的APP的URL Scheme是urlScheme,名称是appName

CLLocationCoordinate2D coordinate;
NSString *urlScheme;
NSString *appName;

苹果地图

苹果地图可以通过openURL的方式打开。

NSString *urlString = [[NSString stringWithFormat:@"http://maps.apple.com/?daddr=%f,%f&saddr=slat,slng",coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

但是这种方式,不能以当前位置为起点,所以不符合我们的要求。网上说可以用下面这种方式,但是我没成功

NSString *urlString = [[NSString stringWithFormat:@"http://maps.apple.com/?daddr=%f,%f&saddr=Current+Location",coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

但是苹果提供了另一种方式,使用MKMapItem

MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocation];
MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil]];
[MKMapItem openMapsWithItems:@[currentLocation, toLocation] 
               launchOptions:@{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving,
                               MKLaunchOptionsShowsTrafficKey: [NSNumber numberWithBool:YES]}];

效果如下

blob.png

百度地图

NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

要注意几点:

1. origin={{我的位置}}

这个是不能被修改的 不然无法把出发位置设置为当前位置

2. destination=latlng:%f,%f|name=目的地

name=XXXX name这个字段不能省略 否则导航会失败 而后面的文字则可以随便填

3. coord_type=gcj02

coord_type允许的值为bd09ll、gcj02、wgs84 如果你APP的地图SDK用的是百度地图SDK 请填bd09ll 否则 就填gcj02 wgs84你基本是用不上了(关于地图加密这里也不多谈 请自行学习)

效果如下

blob.png

高德地图

NSString *urlString = [[NSString stringWithFormat:@"iosamap://navi?sourceApplication=%@&backScheme=%@&lat=%f&lon=%f&dev=0&style=2",appName,urlScheme,coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

要注意几点:

1. sourceApplication=%@&backScheme=%@

sourceApplication代表你自己APP的名称 会在之后跳回的时候显示出来 所以必须填写 backScheme是你APP的URL Scheme 不填是跳不回来的哟

2. dev=0

这里填0就行了,跟上面的gcj02一个意思 1代表wgs84 也用不上

效果如下:

blob.png

退出导航后,会提示是否跳回到APP

blob.png

谷歌地图

NSString *urlString = [[NSString stringWithFormat:@"comgooglemaps://?x-source=%@&x-success=%@&saddr=&daddr=%f,%f&directionsmode=driving",appName,urlScheme,coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

要注意几点

1. x-source=%@&x-success=%@

跟高德一样 这里分别代表APP的名称和URL Scheme

2. saddr=

这里留空则表示从当前位置触发

效果如下。在有多条路线的时候,谷歌地图会让你选择其中一条

blob.png

选择之后就进入了导航页面。

blob.png

腾讯地图

既然提到了腾讯地图 那么还是说一下 从网上和官方文档可以得知 大概调用的URI如下

NSString *urlString = [[NSString stringWithFormat:@"qqmap://map/routeplan?type=drive&fromcoord=CurrentLocation&tocoord=%f,%f&coord_type=1&policy=0",coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

但是很遗憾,调用之后出错了,无法导航

效果如下

blob.png

小结

文中的demo可以在这里找到

相对来说,高德地图做得更用心一点,毕竟也是苹果的服务提供商。而百度相对来说则差一点。谷歌的话,不翻墙还是用不了。而苹果自带的地图则不多说了,功能还是太简单了。

这里只是用最简单的方式对导航功能进行了调用,各家的地图其实还有很多参数和功能没有使用到。需要知道的同学可以在文章开头的文档链接中找到详细的描述。

UniApp一键唤起高德/百度/苹果地图实现导航与距离计算 直接调用手机系统自带地图App完成路径规划和实时导航,支持iOS和Android双端,兼容高德地图、百度地图、苹果地图等主流应用。输入起点和终点的经纬度或中文地址关键词,即可快速获取驾车/步行路线、跳转至原生导航界面、计算两地直线距离和实际行驶距离。所有功能基于uni-app标准项目结构封装,已预置pages.路由配置、locationDemo示例页面、manifest.权限声明、App.vue初始化逻辑及uni.scss基础样式,开箱即用。无需集成第三方SDK,不依赖额外插件,通过uni.getSyste 阅读详情

相关推荐

Html5如何唤起百度地图App的方法

主要介绍了Html5如何唤起百度地图App的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

URI跳转方式地图导航的代码实践

作者:里脊串 授权本站转载。 前言 之前介绍了我正在做的是一款定位主打的应用。然后最近我们需要做一个定位导航的功能,能够让用户从当前位置导航到指定目的地(默认以驾车的方式导航)。 手机上的导航方式,分应用内导航和应用外导航: 应用内导航 是指使用地图服务提供的SDK(比如高德,百度等等),直接将导航功能嵌入到我们自己的APP内部 但是这个方案我个

Ant_Huzi的博客 3550

STC15单片机实战项目软件开发第四讲 - 按键检测(状态机)

软件开发第四讲 - 按键检测(状态机) 一、工具链接 1、Keil c51 UV4 https://yunpan.360.cn/surl_yrIfYYmeRFk 2、STC-ISP下载软件 https://yunpan.360.cn/surl_yxH4CuUUvI3 二、学习板获取方式 方法1:自己设计PCB,自行打板焊接; 方法2:用群主设计的PCB,自行打板焊接; 方法3:向群主购买,淘宝链接...

硬件家园 3046

百度地图使用、调起本机App地图

集成百度地图过程不做讲解,直接按照官方文档一步步走即可 开发指南 效果图   引入头文件 #import <MapKit/MapKit.h> #import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件 #import <BaiduMapAPI_Map/BMKMapComponent.h&...

夜破星辰_JSON的博客 5267

DC/DC开关电源EMC仿真红宝书

本红宝书系统性介绍开关电源EMC仿真方法,包括仿真原理、仿真思路、仿真工具以及仿真效率提升与仿测一致性的实战经验。从理论到仿真,从仿真到应用,真正帮你实现一文掌握开关电源EMC仿真!全文约14000字,适读人群:开关电源设计、电磁兼容EMC相关从业者,电磁相关专业研究生及CST仿真爱好者等。

电磁学社 2498

芯片详解——AD7606

AD7606详解

weixin_45661757的博客 5021

百度地图使用

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 做关于位置或...

qq_39040623的博客 1797

【零基础学习CAPL】——CAN报文的发送(CRC——ChecSum值)

本章主要介绍带有CRC值的报文发送一般报文可使用CANoe的IG模块直接发送,但带有CRC值的报文就只能编写脚本进行发送,以下详细讲解在配合Panel面板情况下,如何进行带有循环冗余码的报文进行报文的发送。

LOVE135149的博客 1913

在H5页面中跳转到地图App,或者在本地App中加载的H5页面跳转到地图App,唤起App进行导航

在H5中使用地图导航1、腾讯地图:2、高德地图:3、百度地图: 1、腾讯地图: 调用方式: http://apis.map.qq.com/uri/v1/marker?marker=coord:lat,lng;addr:address 其中lat、lng、address分别为经纬度和详细地址三个参数,更多参数介绍可在腾讯地图api找到:https://lbs.qq.com/uri_v1/guide....

徊忆羽菲 5840

【WorkBuddy专栏52】Codex与WorkBuddy生态适配、用户争夺与未来走向(下)

【WorkBuddy专栏52】Codex与WorkBuddy在中国大陆的发展——生态适配、用户争夺与未来走向(下)

AI人人懂 678

(五)C++自制植物大战僵尸游戏LoadingScene的实现讲解

游戏启动后就会立即切换到游戏加载场景中。只有游戏资源文件加载完成后,才能进入游戏。Loadingscene类继承Cocos2d-x中的Scene父类,表明Loadingscene是一个场景类。切换到LoadingScene场景中,首先会创建该场景,会调用函数,在该函数中调用自己定义的方法实现指定功能。代码文件的位置如下图所示。

尔灵尔亿的博客 2006

Android 调起百度地图和高德地图

目录   前言 原理 示例代码 1.百度地图 2.高德地图 前言 最近由于业务需求需要拉起百度地图和高德地图进行导航, 原理 百度和高德都给开发者提供了接口,开发者只需要调用接口传递起始坐标就可以了。 示例代码 1.百度地图 效果图: 代码: try { LatLng startLatLng = new LatLng(39.940387, 116.29446)...

坚持学习 9279

DFT笔记 DC/AC mode与Func

DFT scan可以分为DC和AC两种,区别如下图。

m0_61544122的博客 5723

js 调用 百度/腾讯/高德地图app 导航 初始位置为我的位置

百度地图app 文档 要在手机上访问 <p><a href="baidumap://map/direction?mode=[transit:公交,driving:驾车]&origin=39.916979519873,116.4100495056&destination=39.980683,116.302title=目的位置&content=百度奎科大厦" class="map">查看地图公交/驾车去这里 导航app</a></p> &l

weixin_42448623的博客 3414

【YOLO11改进 - C3k2融合】C3k2融合动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务

【YOLO11改进 - C3k2融合】C3k2融合动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 517

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

百度地图API开发----手机地图做导航功能

第一种方式:手机网页点击打开直接进百度地图APP <a href="baidumap://map/direction?mode=[transit:公交,driving:驾车]&origin=纬度,经度&destination=纬度,经度®ion=城市代码" class="map">查看地图公交/驾车去这里</a>调用了app 第二种方式:网页打开...

weixin_33834628的博客 4237

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android调用跳转百度地图、高德地图、腾讯地图进行目的地导航

Android App跳转百度地图、高德地图、腾讯地图进行目的地导航。 先放上百度、高德、腾讯地图调起API文档地址,有些参数不懂可以参考。 百度地图:http://lbsyun.baidu.com/index.php?title=uri/api/android 高德地图:https://lbs.amap.com/api/amap-mobile/guide/android/navigatio...

Ever69的博客 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IOS和Android平台,移动web跳转百度、高德地图

最近项目遇到移动web需要跳转不同的地图进行导航。因为本项目是基于mui+h5+开发的,本以为[mui官网](http://www.html5plus.org/doc/zh_cn/maps.html#plus.maps.openSysMap)会有相应api,会很简单,岂料,真是一把血泪史。看mui官网也有不少人在这上面走弯路,我也再次记录之。

Dream 5418

使用uri api调起本地百度地图遇见的问题

使用uri api调起本地百度地图遇见的问题 今天遇见一bug,就是在调起本机百度地图做路径规划的时候,终点位置和名称都显示正常,但是就是无法定位到当前位置信息。也就是路径规划时候只有终点没有起点。 但是这个功能以前一直正常,可能最近才出现的问题╭(╯^╰)╮。然后又去看了看api文档,起点参数不填写就默认是当前位置是起点,终点地址的参数也没有变化,在一加手机上可以成功进行路劲规划,但是在

zdzzzz的博客 3359

第三方应用APP唤起/调起 三大地图 百度/腾讯/高德 的 点/导航 安卓 和ios 带有三大地图的API开放平台地址

三大地图 APP 判断 "com.baidu.BaiduMap "com.autonavi.minimap "com.tencent.map let flatitude=e.latitude; let flongitude=e.longitude; let tlatitude='39.909187'; let tlongitude='116.397451'; let name='天安门'; let url = ""; ...

王sir的博客 1万+

显示百度地图,点击可以打开的方式:

静态地图: http://api.map.baidu.com/staticimage?center=113.945077,22.520697&width=300&height=200&zoom=11&ak=1ja7XWkSqOxEU67SB7yMhzvT <img style="margin:2px" width="400" height="300" src="http://

简简单单,平平淡淡 1654

安卓和ios跳转百度、高德、苹果地图 定位坐标偏差

安卓和ios跳转百度、高德、苹果地图 定位坐标偏差

qq_39891453的博客 4321

移动端调用百度地图APP导航

// 安卓             $("#daohang").attr("href", "bdapp://map/direction?origin=latlng:" + ph_lat + "," + ph_lng + "|name:我的位置&destination=latlng:" + car_lat + "," + car_lng + "|name:车位置&mode=driving&src=

qq_29596627的博客 2413

75.百度地图的URL分享--iOS 调用百度地图App进行导航

LCP这样的软件到底有没有提高效率,自己其实也还是存疑的,但是它所提供的思路确实是令人眼前一亮(后来才知道这在越狱设备上早有实现,但是戴着镣铐跳舞还是让人很钦佩的)。 但是在一些特殊情境下,LCP确实能够节省时间和精力,大大提高效率,比如说和朋友或是小伙伴出去玩,东走走西逛逛,等到要回家的时候,只要打开LCP,点一下Action,在百度地图中直接跳出当前位置到家里的公交路线(没钱的学生党只能老老

蝶飞花已醉的博客 5145

iOS开发—调用第三方地图导航

目里面要求点击发送的位置,  需要导航, 导航两种实现方式 (集成第三方SDK、URL跳转第三方应用)  项目要求实现直接跳转 所以接下来做的是实现URL跳转第三方地图来导航了 项目中实现弹窗让用户输入目的地 ,实现如下的效果 思路:把输入的目的地地理编码  获取到的经纬度再调用第三方的导航 第三方导航是指以URL跳转的方式(在iOS中就是以URL Scheme的方式),直接跳到

baidu_25743639的专栏 2989
上一篇: 如何控制百度地图的显示范围 ios软件开发
下一篇: 跳转到AppStore
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值