ISO Swift高德导航开发指南

开发环境

xode:12.0
模拟器:iphone 14 plus
cocoapods:1.15.2
swift:5.7.1
ios:16.1(20B72)

IOS包管理工具cocoapods

官网地址:https://cocoapods.org/

方式1:安装指令

sudo gem install cocoapods

方式2:直接下载安装包安装
安装包下载地址:https://cocoapods.org/app

进入应用目录,并初始化cocoapods

cd ~/Desktop/Workspaces/MapKitDemo
pod init;
vim Podfile

添加依赖
http请求工具:Alamofire
JOSN转换工具:SwiftyJSON
JSON转对象插件:HandyJSON
高德导航依赖:AMapNaviAMapSearch

  pod "AMapNavi" , "10.0.600"pod "AMapSearch" , "9.7.0"pod "SwiftyJSON" , "5.0.2"pod "HandyJSON" , "5.0.2"pod "Alamofire" , "~> 5.2"

执行安装依赖命令

pod install

后续增加依赖可修改Podfile文件,增加pod配置,再执行pod install命令

打开应用

安装cocoapods的应用,不能直接打开.xcodeproj文件,需要打开生成的.xcworkspace文件

open MapKitDemo.xcworkspace/

申请高德开放平台Key

https://lbs.amap.com/api/ios-navi-sdk/guide/create-project/get-key

AMapServices.shared().apiKey = ""

隐私合规说明
在调用任何一个导航manager之前必须进行合规检查,设置接口之前保证隐私政策合规,检查接口如下:

AMapNaviManagerConfig.shared().updatePrivacyShow(.didShow, privacyInfo: .didContain)
AMapNaviManagerConfig.shared().updatePrivacyAgree(.didAgree)

权限配置

修改info.plist配置文件,添加非https网络请求服务、定位服务、语音播报服务、后台定位服务

	<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>导航SDK需要您的定位服务,否则可能无法使用,如果您需要使用后台导航功能请选择“始终允许”。</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>导航SDK需要您的定位服务,否则可能无法使用。</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>导航SDK需要您的定位服务,否则可能无法使用。</string>
<key>UIBackgroundModes</key>
<array><string>audio</string><string>location</string>
</array>

开启定位服务

import UIKit
import CoreLocationclass ViewController: UIViewController,CLLocationManagerDelegate {let locationManage = CLLocationManager()override func viewDidLoad() {super.viewDidLoad()locationManage.delegate=selflocationManage.desiredAccuracy = kCLLocationAccuracyBest//设置位置精度locationManage.requestLocation()//请求用户位置,仅一次}override func viewDidAppear(_ animated: Bool) {super.viewDidAppear(animated)locationManage.requestWhenInUseAuthorization()//请求授权获取定位}//请求位置时自动调用func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {let latitude=locations[0].coordinate.latitudelet longitude=locations[0].coordinate.longitudeprint(latitude,longitude)}func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {print("获取定位失败",error)}}

初始化 AMapNaviCompositeManager

import UIKit
import AMapNaviKit
import AMapFoundationKitclass MapNavController:UIViewController,AMapNaviCompositeManagerDelegate{override func viewDidLoad() {super.viewDidLoad()initNavi()}override func viewWillAppear(_ animated: Bool) {super.viewWillAppear(animated)//在显示地图前需要进行隐私合规设置AMapNaviManagerConfig.shared().updatePrivacyShow(.didShow, privacyInfo: .didContain)AMapNaviManagerConfig.shared().updatePrivacyAgree(.didAgree)}//初始化导航func initNavi(){self.view.backgroundColor = UIColor.white;//创建进入导航的按钮let routeBtn = UIButton(configuration: UIButton.Configuration.tinted(), primaryAction: nil)routeBtn.frame = CGRect.init(x: (UIScreen.main.bounds.size.width - 200) / 2.0, y: 200.0, width: 200.0, height: 45.0)routeBtn.setTitle("打开导航", for: UIControl.State.normal)routeBtn.setTitleColor(UIColor.init(red: 53/255.0, green: 117/255.0, blue: 255/255.0, alpha: 1), for: UIControl.State.normal)routeBtn.layer.cornerRadius = 5routeBtn.layer.borderColor = UIColor.init(red: 53/255.0, green: 117/255.0, blue: 255/255.0, alpha: 1).cgColorrouteBtn.layer.borderWidth = 1routeBtn.addTarget(self, action: #selector(self.openNavPage),for: UIControl.Event.touchUpInside)self.view.addSubview(routeBtn)//初始化导航组件self.compositeManager = AMapNaviCompositeManager.init()self.compositeManager.delegate = self}//打开导航页面@objc func openNavPage() {let config = AMapNaviCompositeUserConfig.init()let info = AMapNaviVehicleInfo.init()//设置车辆类型, 0:燃油客车; 1:燃油货车; 2:纯电动客车; 3:纯电动货车; 4:插电式混动客车; 5:插电式混动货车; since 8.0.0 新增11:摩托车. 默认0(小车). 注意:只有设置了货车, 其他关于货车的属性设置才会生效info.type = 0;config.setVehicleInfo(info);info.vehicleId = "浙F-12345";let startLat:Double = 39.902896let startLon:Double = 116.42792let startCity:String ="北京站"config.setRoutePlanPOIType(AMapNaviRoutePlanPOIType.start, location: AMapNaviPoint.location(withLatitude: startLat, longitude: startLon), name: startCity, poiId: nil)//最多3个途径点let lat:Double= 39.975642let lon:Double= 116.306332let city:String = "苏州街(地铁站)"config.setRoutePlanPOIType(AMapNaviRoutePlanPOIType.way, location: AMapNaviPoint.location(withLatitude: lat, longitude: lon), name: city, poiId: nil)let endLat:Double = 39.894914let endLon:Double = 116.322062let endCity:String = "北京西站"config.setRoutePlanPOIType(AMapNaviRoutePlanPOIType.end, location: AMapNaviPoint.location(withLatitude: endLat, longitude: endLon), name: endCity, poiId: nil)//通过parsent方式显示路线规划页面self.compositeManager.presentRoutePlanViewController(withOptions: config)}// MARK: - AMapNaviCompositeManagerDelegate/*** @brief 发生错误时,会调用此方法* @param compositeManager 导航组件类* @param error 错误信息*/func compositeManager(_ compositeManager: AMapNaviCompositeManager, error: Error) {let error = error as NSErrorNSLog("导航异常:{%d - %@}", error.code, error.localizedDescription)}/*** @brief 算路成功后的回调函数, 路径规划页面的算路、导航页面的重算等成功后均会调用此方法* @param compositeManager 导航组件类*/func compositeManager(onCalculateRouteSuccess compositeManager: AMapNaviCompositeManager ){NSLog("导航算路成功,%ld", compositeManager.naviRouteID)}/*** @brief 开始导航的回调函数* @param compositeManager 导航组件类* @param naviMode 导航类型,参考 AMapNaviMode .*/func compositeManager(_ compositeManager: AMapNaviCompositeManager, didStartNavi naviMode: AMapNaviMode) {NSLog("开始导航")}/*** @brief 导航到达目的地后的回调函数* @param compositeManager 导航组件类* @param naviMode 导航类型,参考 AMapNaviMode .*/func compositeManager(_ compositeManager:AMapNaviCompositeManager , didArrivedDestination naviMode :AMapNaviMode){NSLog("导航到达目")}/*** @brief 导航组件页面回退或者退出导航组件时会调用此函数 since 5.5.0* @param compositeManager 导航组件类* @param backwardActionType 导航组件页面回退的动作类型,参考 AMapNaviCompositeVCBackwardActionType .*/func compositeManager(_ compositeManager:AMapNaviCompositeManager ,didBackwardAction backwardActionType:AMapNaviCompositeVCBackwardActionType){NSLog("导航组件页面回退或者退出导航")}/*** @brief 每次进入导航组件时和驾车路径规划策略改变均会调用此方法 since 6.1.0* @param compositeManager 导航组件类* @param driveStrategy 驾车路径规划策略,参考 AMapNaviDrivingStrategy .*/func compositeManager(_ compositeManager:AMapNaviCompositeManager ,onDriveStrategyChanged driveStrategy:AMapNaviDrivingStrategy){NSLog("进入导航")}/*** @brief 导航到达某个途经点的回调函数 since 6.1.0* @param compositeManager 导航组件类* @param wayPointIndex 到达途径点的编号,标号从0开始. 注意:如果导航过程进行了路径重算(包含偏航、手动刷新等),wayPointIndex会重新从0开始计数*/func compositeManager(_ compositeManager:AMapNaviCompositeManager ,onArrivedWayPoint wayPointIndex:Int){NSLog("导航到达某个途经点")}
}

开启弹出导航页面窗口配置

修改AppDelegate文件,增加UIWindow配置

import AMapFoundationKit@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {var window: UIWindow?func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {let viewController = ViewController()window = UIWindow(frame: UIScreen.main.bounds);window!.rootViewController = UINavigationController(rootViewController: viewController)window!.backgroundColor = UIColor.whitewindow!.makeKeyAndVisible()AMapServices.shared().apiKey = "" //高德KEY//高德 iOS SDK 支持苹果 ATS 安全功能的方案,为保证应用在提交 AppStore 时不受影响,需要开启 HTTPS 功能AMapServices.shared().enableHTTPS = truereturn true}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Avalonia 捕获全局异常(UI线程 和 非UI线程),增加客户端的稳定性

在 App.axaml.cs 中&#xff0c;App类添加下列事件&#xff1b; 1.重写 OnFrameworkInitializationCompleted &#xff0c;会在程序初始化完成后触发 2. 绑定AppDomain中当前域的事件 AppDomain.CurrentDomain.UnhandledException HandleGlobalException; //UI线程 …

【任务调度】Apache DolphinScheduler快速入门

Apache DolphinScheduler基本概念 概念&#xff1a;分布式、去中心化、易扩展的可视化DAG工作流任务调度系统。 作用&#xff1a;解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。Apache DolphinScheduler是一款开源的调度工具&#xff…

windows下python opencv ffmpeg读取摄像头实现rtsp推流 拉流

windows下python opencv ffmpeg读取摄像头实现rtsp推流 拉流 整体流程1.下载所需文件1. 1下载rtsp推流服务器1.2 下载ffmpeg2. 开启RTSP服务器3. opencv 读取摄像头并调用ffmpeg进行推流4. opencv进行拉流整体流程 1.下载所需文件 1. 1下载rtsp推流服务器 下载 RTSP服务器 下…

jenkins 部署 vue 项目

jenkins 部署 vue 项目 环境 系统&#xff1a;CentOS7.9 Jenkins&#xff1a;最新LTS版本 nginx: 1.24.x gitLab: 打包机&#xff1a;jenkins所在服务器 目标机器&#xff1a;nginx所在服务器 jenkins部署配置 关键脚本 #node -v #已经安装node_module就无需执行install安…

[旅游] 景区排队上厕所

人有三急&#xff0c;急中最急是上个厕所要排队&#xff0c;而且人还不少&#xff01;这样就需要做一个提前量的预测&#xff0c;万一提前量的预测&#xff0c;搞得不当&#xff0c;非得憋出膀光炎&#xff0c;或者尿裤子。尤其是女厕所太少&#xff01;另外一点是儿童根本就没…

python装饰器系列教程(4)

上一篇的教材可查看https://blog.csdn.net/qq_45812220/article/details/137812983?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137812983%22%2C%22source%22%3A%22qq_45812220%22%7D 本篇在上一篇的基础上&#xff0c;探究…

Chatgpt系列(二) 如何写prompt提词

prompt提词是gpt工程的一个核心, 一个prompt多一个空格少一个空格就可能会出现两种结果.这里介绍一些实战中的经验. 根据场景设置temperature和top_k temperature越大,top_k越小返回的结果就越稳定, 对于信息提取,意图识别, 意图判断这种非创造性的可以调整这两个值,降低幻觉…

什么是关键信息基础设施及其安全保护条例

关键信息基础设施是国家的重要战略资源&#xff0c;涉及到国家的主权、安全和发展利益。这些设施在国家经济和社会服务中承担着重要角色&#xff0c;其安全稳定运行直接关系到国家安全和经济社会健康发展。让我们一起来了解一下什么是关键信息基础设施及其安全保护条例。 一、…

虚拟现实(VR)开发框架

虚拟现实&#xff08;VR&#xff09;开发框架为开发者提供了构建VR应用程序所需的基本工具和功能。它们通常包括3D引擎、场景图、输入系统、音频系统和网络功能。下面是一些流行的VR开发框架。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…

怎样实现opc采集数据后传给web后端

现在很多老工厂要进行数字化改造&#xff0c;现场生产的各种数据需要传到web后端&#xff0c;很多工厂现场原有的自动监控系统已经采集了现场的各种数据&#xff0c;只是没有形成联网。如果前端自动化系统全部废除&#xff0c;重新做数字化控制系统&#xff0c;成本投入太大&am…

AI系列:大语言模型的function calling(上)

目录 大语言模型(LLM) 的function calling实验&#xff1a;OpenAI之function calling序列图&#xff1a;function calling如何工作详情: 对话内容参考代码 后续: 使用LangChain实现function calling参考 大语言模型(LLM) 的function calling 大语言模型(LLM)可以使用自然语言与…

设计模式-抽象工厂模式(Abstract Factory Pattern)结构|原理|优缺点|场景|示例

目录 设计模式&#xff08;分类&#xff09; 设计模式&#xff08;六大原则&#xff09; 创建型 工厂方法 抽象工厂模式 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一个创建一系列相关…

Python之Excel合并

大家好&#xff01;今天我们要一起探索如何使用Python这个神奇的工具&#xff0c;将一堆Excel文件轻松合并成一个大文件。想象一下&#xff0c;就像是一台高效的Excel数据收割机&#xff0c;让你的工作效率飙升&#xff01;准备好你的笔记本&#xff0c;跟着我一步步操作吧。 …

【倾诉】我与IT

是的&#xff01; 今天不想发知识博客了&#xff0c;想谈谈这些年这几年的我和IT 懵懂 2018年&#xff0c;参加了高考&#xff0c;出成绩那天格外闷热。报考志愿的那天脑袋空空的我填了生物、化学、数学这一类志愿&#xff0c;然后勾选了 调剂√ 这样&#xff0c;一个脑袋空…

hexo实现个人博客及涉及的技术学习

一、背景 最近,一直想做一个属于自己的网站.可以从零开始搭建一个网站,顺便可以把日常中学到的技术用于实战,还可以顺便记录自己的所思所感,记录成长的过程. 方案 一开始的方案是从零开始,模仿常见个人博客的设计,基于vueSpringbootMySQL的去实现网站. 新建项目之后,发现vu…

归一化平面和像素坐标系

归一化平面&#xff1a; 归一化的平面&#xff08;Normalized Plane&#xff09;在计算机视觉和三维重建领域中指的是一个虚拟的二维平面&#xff0c;用于将三维空间中的点投影到相机的成像平面前的一个中间阶段。这个平面位于相机前方&#xff0c;并且它的坐标系经过特殊处理使…

AMEYA360:兆易创新推出GD32L235系列低功耗MCU新品

兆易创新GigaDevice (股票代码 603986)今日宣布&#xff0c;正式推出GD32L235系列MCU&#xff0c;进一步丰富了低功耗产品的选型和布局。全新GD32L235产品系列紧贴低功耗市场需求&#xff0c;以更优的功耗效率、丰富的接口资源、更高性价比为工业表计、智能门锁、便携式设备、I…

【Python】Python中大文件切割的艺术

淡淡相思 都写在脸上 沉沉离别背在肩上 泪水流过脸庞 所有的话 现在还是没有讲 看那青山 荡漾在水上 看那晚霞吻着夕阳 我用一生的爱 去寻找那一个家 今夜你在何方 转回头 迎着你的笑颜 心事全都被你发现 梦里遥远的幸福 它就在我的身旁 &#x1f3b5; 于…

线上线下交友社区系统 可打包小程序 支持二开 源码交付!

社交网络的普及&#xff0c;人们交友的方式发生了巨大的变化。过去&#xff0c;我们主要通过线下的方式来结识新朋友&#xff0c;比如在学校、工作场所、社交活动或者兴趣小组中。然而&#xff0c;随着移动端软件的发展&#xff0c;线上交友也逐渐变得流行。 方便性&#xff1a…

deepspeed笔记

文章目录 一、deepspeed是什么&#xff1f;二、能训多大的模型&#xff0c;耗时如何&#xff1f;三、RLHF训练流程四、通信策略 一、deepspeed是什么&#xff1f; 传统的深度学习&#xff0c;模型训练并行&#xff0c;是将模型参数复制多份到多张GPU上&#xff0c;只将数据拆分…