首先申明,此文章是转载 我是闰土你是猹 博主的文章,觉得有用,就拿过来,确实不好找相关案例,特此记录一下!大家可以移步文章原地址:https://blog.csdn.net/qq_30932479/article/details/86631065

重点:

这里使用的朋友直接拷贝下面代码到项目中即可:

//地图类型
enum MapForm {enum MapURI:String {//百度case baiduMap = "baidumap://"//高德case gaodeMap = "iosamap://"//苹果case appleMap = "http://maps.apple.com/"//谷歌case googleMap = "comgooglemaps://"//腾讯case qqMap = "qqmap://"}enum MapName:String {//百度case baiduMap = "百度地图"//高德case gaodeMap = "高德地图"//苹果case appleMap = "系统地图"//谷歌case googleMap = "谷歌地图"//腾讯case qqMap = "腾讯地图"}
}
//地图信息
struct MapInfo {static func baiDuUrlString(targetLat:Double,targetLon:Double,targetName:String) -> String {//return "baidumap://map/direction?origin={{我的位置}}&destination=\(targetName)&mode=driving&src=\(targetName)&coord_type=gcj02"/*注意:此处destination后面有三种写法:1,destination=\(targetLat),\(targetLon)2,destination=\(targetName)3,destination=name:\(targetName)|latlng:\(targetLat),\(targetLon)*/return "baidumap://map/direction?origin={{我的位置}}&destination=name:\(targetName)|latlng:\(targetLat),\(targetLon)&mode=driving&src=\(targetName)&coord_type=gcj02"}static func gaoDeUrlString(targetLat:Double,targetLon:Double,targetName:String) -> String {return "iosamap://path?sourceApplication=导航功能&backScheme=\(AppInfo.appDisplayName)&poiname=\(targetName)&poiid=BGVIS&lat=\(targetLat)&lon=\(targetLon)&dname=\(targetName)&dev=0&m=0"}static func googleUrlString(targetLat:Double,targetLon:Double,targetName:String) -> String {return "comgooglemaps://?x-source=\(AppInfo.appDisplayName)&x-success=urlSchem&saddr=&daddr=targetLat,targetLon&directionsmode=driving"}static func qqDuUrlString(targetLat:Double,targetLon:Double,targetName:String) -> String {return "qqmap://routeplan?type=bus&from=&fromcoord=&to=\(targetName)&tocoord=\(targetLat),\(targetLon)&policy=1&referer=\(AppInfo.appDisplayName)"}
}
//检测地图是否存在然后打开
struct CCMapGuide {static func judgeMapAppInPhoneAndJumpInto(targetLat:Double,targetLong:Double,targetName:String,VC:UIViewController) {//盛放地图元素的数组var maps = [[String: String]]()//判断地图//自带地图if UIApplication.shared.canOpenURL(URL(string: MapForm.MapURI.appleMap.rawValue)!) {var iosMap = [String: String]()iosMap["title"] = MapForm.MapName.appleMap.rawValuemaps.append(iosMap)}//百度地图if UIApplication.shared.canOpenURL(URL(string: MapForm.MapURI.baiduMap.rawValue)!) {var baiduDic = [String: String]()baiduDic["title"] = MapForm.MapName.baiduMap.rawValue//\(self.pointDetailView.pointTitle.text ?? "")let urlString = MapInfo.baiDuUrlString(targetLat: targetLat, targetLon: targetLong, targetName: targetName)baiduDic["url"] = urlStringmaps.append(baiduDic)}//高德地图if UIApplication.shared.canOpenURL(URL(string: MapForm.MapURI.gaodeMap.rawValue)!) {var gaodeDic = [String: String]()gaodeDic["title"] = MapForm.MapName.gaodeMap.rawValuelet urlString = MapInfo.gaoDeUrlString(targetLat: targetLat, targetLon: targetLong, targetName: targetName)let escapedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)gaodeDic["url"] = escapedStringmaps.append(gaodeDic)}//谷歌地图if UIApplication.shared.canOpenURL(URL(string: MapForm.MapURI.googleMap.rawValue)!) {var googleDic = [String: String]()googleDic["title"] = MapForm.MapName.googleMap.rawValuelet urlString = MapInfo.googleUrlString(targetLat: targetLat, targetLon: targetLong, targetName: targetName)let escapedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)googleDic["url"] = escapedStringmaps.append(googleDic)}//腾讯地图if UIApplication.shared.canOpenURL(URL(string: MapForm.MapURI.qqMap.rawValue)!) {var qqDic = [String: String]()qqDic["title"] = MapForm.MapName.qqMap.rawValuelet urlString = MapInfo.qqDuUrlString(targetLat: targetLat, targetLon: targetLong, targetName: targetName)let escapedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)qqDic["url"] = escapedStringmaps.append(qqDic)}if maps.count == 0 {return}let alertVC = UIAlertController.init(title: "请选择导航应用程序", message: nil, preferredStyle: .actionSheet)for i in 0..<maps.count {let title = maps[i]["title"]let action = UIAlertAction(title: title, style: .default) { (_) inif i == 0 {let loc = CLLocationCoordinate2DMake(targetLat, targetLong)let currentLocation = MKMapItem.forCurrentLocation()let toLocation = MKMapItem(placemark: MKPlacemark(coordinate: loc, addressDictionary: nil))toLocation.name = targetNameMKMapItem.openMaps(with: [currentLocation, toLocation], launchOptions: [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving, MKLaunchOptionsShowsTrafficKey: true])} else {let urlString = maps[i]["url"]! as NSStringlet url = NSURL(string: urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)UIApplication.shared.openURL(url! as URL)}}alertVC.addAction(action)}let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)alertVC.addAction(cancelAction)VC.present(alertVC, animated: true, completion: nil)}
}

注意:百度地图destination后面有三种写法:
        1,destination=\(targetLat),\(targetLon)   按经纬度搜索目的地,但目的地会显示为“地图上的点”
        2,destination=\(targetName)   直接搜索目标名称,如果目标名称模糊会显示搜索结果列表
        3,destination=name:\(targetName)|latlng:\(targetLat),\(targetLon)  按经纬度搜索目的地,目的地显示为传入的目标地点

三种写法跳转到百度地图的显示效果不一样,分别是:

 
好了以上就是全部内容,详细的内容看代码应该好理解,直接把上面三段代码拷贝到项目中,然后直接调用:

CCMapGuide.judgeMapAppInPhoneAndJumpInto(targetLat: 39.979590, targetLong: 116.352792, targetName: "目的地", VC: self) // self为当前视图控制器,也可以直接写当前视图控制器的类名

swift中检测跳转苹果自带地图、高德地图、百度地图、腾讯地图相关推荐

  1. Android 跳转到高德、百度、腾讯地图进行导航

    需求: 点击店铺位置,弹出popupwindow进行选择 如果该手机安装了所选的地图APP,就跳转到该地图APP中 如果该手机未安装所选的地图APP,就提示 MapUtil工具类 import and ...

  2. Flutter 调用地图软件(高德、百度、腾讯、苹果)同时实现另类国际化

    文章目录 Flutter 调用地图软件(高德.百度.腾讯.苹果) 一.说明 第 1 类:App 集成导航功能 第 2 类:跳转第三方地图软件 二.实现步骤 使用 1.添加插件: 2.iOS 配置 in ...

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

    源码地址https://download.csdn.net/download/liuyinghui523/10801074 1.在app中获得定位权限 <key>NSLocationAlw ...

  4. Flutter 调用地图软件(高德、百度、腾讯、苹果)

    一.背景 flutter项目中有去调用其他第三方地图应用的关键字的路线搜索功能,故此做一个总结. 二.使用 1.添加插件: url_launcher: ^5.4.2 2.iOS 配置 info.pli ...

  5. Flutter 实战调起三方地图导航(高德、百度、腾讯、苹果)

    实战工具类 地图导航 注意 地图Url 需要Uri.encodeFull(url)进行编码,要不然IOS无法调起 三方导航 为何使用encodeFull见 https://blog.csdn.net/ ...

  6. Swift中页面跳转与传值:

    1.简单方式 首先,Swift的跳转可分为利用xib文件跳转与storyboard跳转两种方法,我这里选择使用storyboard的界面跳转方法. 1.通过在storyboard中拉button控件建 ...

  7. 如何在'纯'Swift中创建弱协议引用(不带@objc)

    本文翻译自:How can I make a weak protocol reference in 'pure' Swift (without @objc) weak references don't ...

  8. ios-跳转到苹果自带地图进行导航

    在某些应用中可能会出现,我们输入某个位置,然后点击导航,会跳到苹果自带的地图中进行导航,这应该怎么做? 其实很简单,首先我们需要根据输入的地名进行地理编码, 调用方法去得到地标对象,然后去获取CLPl ...

  9. vue中使用腾讯地图选择地址

    腾讯地图选择地址引发的一系列问题 2019/12/14更新 修复了自治区/直辖市无法选择的bug(比如上海之类的城市) 采用更加友好的方式来选择地址 新的文章链接:vue中使用腾讯地图选择地址(二) ...

最新文章

  1. 2022-2028年中国智能制造装备产业深度调研及投资前景预测报告
  2. Hibernate关系映射 一对一双向外键关联@OneToOne Annotation方式
  3. nanopi联网更新
  4. 修复boot分区文件被删除的方法
  5. 腾讯信用向全国开放了,据说700分都算低的!
  6. 【转】QT布局QGridLayout QHBoxLayout QVBoxLayout简要分析!!
  7. iOS 52个技巧学习心得笔记 第一章 熟悉OC
  8. 一句Python,一句R︱pandas模块——高级版data.frame
  9. mybatis的一级缓存和二级缓存的理解,详细易懂
  10. python 实现相关系数计算和检验
  11. 进销存mysql数据库_进销存管理系统数据库设计
  12. 英雄联盟掉线后显示无法连接服务器,英雄联盟掉线连不上出现英文窗口解决方案...
  13. 大学计算机基础贾宗璞答案,大学计算机应用基础C教学大纲
  14. 数字的算法--大数加法
  15. 快递管理系统 V2.0
  16. 大数据必学语言Scala(一):Scala简介
  17. java构造方法:有参构造方法和无参构造方法区别
  18. CentOS 7 安装 OTRS工单提交跟踪系统
  19. 计算机专业哪些证书可以抵个税,个税专项附加扣除中继续教育哪些证书可以扣除?...
  20. 逃离烤鸭味的雾霾北京,我们还能去哪里?

热门文章

  1. es6的15道面试题
  2. idea打包meven镜像_docker打包maven项目推送到阿里云镜像仓库
  3. 『一起学AI』生成对抗网络(GAN)原理学习及实战开发
  4. 《保卫萝卜》分析续——地图构成
  5. 配音软件哪个好用?这几个软件值得你试一试
  6. Soul向港交所递交上市申请,持续发力社交元宇宙赛道
  7. 云上办公便捷、安全,就用华为云桌面
  8. 如何设置payjs的微信jsapi支付目录
  9. 【笔记】封神榜游戏设计VR
  10. win7java浏览器崩溃_浏览器崩溃怎么办,教你win7系统浏览器崩溃的应对办法