iOS添加Mapbox地图库

配置凭据

注册并导航到Account页面。你将需要:

  • 公共访问令牌:

从帐户的tokens页面,你可以复制默认的公共令牌或单击"create a token"按钮来创建新的公共令牌。

  • 带有Downloads:Read范围的秘密访问令牌:

从你帐户的tokens页面中,单击"create a token"按钮。

在创建令牌页面上,为你的令牌命名,并确保Downloads:Read范围旁边的框被选中。

单击页面底部的"create token"按钮以创建你的令牌。

你创建的令牌是一个秘密令牌,这意味着你将只有一次机会将其复制到安全的地方。

配置秘密令牌

你的秘密令牌允许你直接从Mapbox下载SDK。

要使用你的秘密令牌,你需要将其存储在主目录(而不是项目文件夹)的.netrc文件中。
为.netrc配置0600权限:

chmod 0600 ~/.netrc

要设置下载SDK所需的凭据,请将以下条目添加到你的.netrc文件中:

machine api.mapbox.com
login mapbox
password YOUR_SECRET_MAPBOX_ACCESS_TOKEN

配置公共令牌

要配置你的公共访问令牌,请打开项目的Info.plist文件,并添加一个MBXAccessToken密钥,其值是你的公共访问令牌。

添加依赖项

MapBox地图库

Mapbox Maps可以通过Swift Package Manager(SPM)使用。要使用SPM添加Mapbox Maps SDK,你需要配置你的环境以从Mapbox下载它,请确保你已将秘密令牌添加到你的.netrc文件中。

打开Xcode项目,然后转到File > Swift Packages > Add Package Dependency,输入GitHub - mapbox/mapbox-maps-ios: Interactive, thoroughly customizable maps for iOS powered by vector tiles and Metal作为URL,按Enter键拉入软件包,然后单击Add Package

在代码中可以用import MapboxMaps引入依赖包。

MapBox导航库

Mapbox Navigation SDK可以通过Swift Package Manager(SPM)使用。要使用SPM添加Mapbox Navigation SDK,你需要配置你的环境以从Mapbox下载它,请确保你已将秘密令牌添加到你的.netrc文件中。

打开Xcode项目,然后转到File > Swift Packages > Add Package Dependency,输入https://github.com/mapbox/mapbox-navigation-ios.git作为URL,按Enter键拉入软件包,然后单击Add Package

Dependency Rule设置为Up to Next Major Version,并输入2.14.0作为最小版本

选择MapboxNavigation库,如果不需要任何UI组件,则选择MapboxCoreNavigation。

在代码中可以用import MapboxNavigation引入依赖包。

隐私和权限

用户必须先授予您的应用程序权限,然后才能访问有关其位置的信息。添加下列配置到Info.plist。

向用户简要说明应用程序将如何使用其位置数据进行临时访问:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Your precise location is used to calculate turn-by-turn directions, show your location on the map, and help improve the map.</string>

添加LocationAccuracyAuthorizationDescription作为NSLocationTemporaryUsageDescriptionDictionary字典的元素,为用户提供简要解释为什么应用程序中的功能需要其确切位置:

<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict><key>LocationAccuracyAuthorizationDescription</key><string>Please enable precise location. Turn-by-turn directions only work when precise location data is available.</string>
</dict>

添加地图

import UIKit
import MapboxMapsclass MapViewController: UIViewController {internal var mapView: MapView!override public func viewDidLoad() {super.viewDidLoad()let myResourceOptions = ResourceOptions(accessToken: "your_public_access_token")let myMapInitOptions = MapInitOptions(resourceOptions: myResourceOptions)mapView = MapView(frame: view.bounds, mapInitOptions: myMapInitOptions)mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]self.view.addSubview(mapView)}
}

在地图上添加标记

let coordinate = CLLocationCoordinate2DMake(latitude, longitude)// Initialize a point annotation with a geometry ("coordinate" in this case)
var pointAnnotation = PointAnnotation(coordinate: coordinate)// Make the annotation show a red pin
pointAnnotation.image = .init(image: UIImage(named: "red_pin")!, name: "red_pin")
pointAnnotation.iconAnchor = .center
pointAnnotation.iconSize = 0.5    //icon image scale// Create the `PointAnnotationManager` which will be responsible for handling this annotation
let pointAnnotationManager = mapView.annotations.makePointAnnotationManager()// Add the annotation to the manager in order to render it on the map.
pointAnnotationManager.annotations = [pointAnnotation]

在地图上添加路线

// Define two or more geographic coordinates to connect with a line.
// Line from New York City, NY to Washington, D.C.
let lineCoordinates = [CLLocationCoordinate2DMake(40.7128, -74.0060),CLLocationCoordinate2DMake(38.9072, -77.0369)
]// Create the line annotation.
var lineAnnotation = PolylineAnnotation(lineCoordinates: lineCoordinates)
lineAnnotation.lineColor = StyleColor(.blue)// Create the `PolylineAnnotationManager` which will be responsible for handling this annotation
let lineAnnnotationManager = mapView.annotations.makePolylineAnnotationManager()// Add the annotation to the manager.
lineAnnnotationManager.annotations = [lineAnnotation]

设置相机位置

Maps SDK的相机是指用户在地图上方的观测点。

相机的位置和行为由其属性定义:

  • center:相机指向的经度和纬度。
  • bearing:地图的视觉旋转。轴承值是相机指向的指南针方向,以向用户显示哪个方向是“向上”。例如,90°的方位将地图定向,使东面朝上。
  • pitch:地图的视觉倾斜。0°的间距垂直于表面,直视地图,而60°等更大值则朝向地平线。
  • zoom:缩放级别指定相机与所查看功能的距离。在缩放级别0时,视口显示大陆和海洋。11的中间值显示城市级别的细节,在更高的缩放级别,地图开始显示建筑物和兴趣点。
  • padding:地图每个边缘的插图。影响渲染center的位置。
  • anchor:地图坐标系中关于应应用zoombearing的点。与center相互排斥。

在地图初始化时设置相机

// Define center coord, zoom, pitch, bearing
let cameraOptions = CameraOptions(center: CLLocationCoordinate2D(latitude: 40.7135, longitude: -74.0066),zoom: 15.5,bearing: -17.6,pitch: 45)
// Pass camera options to map init options
let options = MapInitOptions(cameraOptions: cameraOptions)
// Pass options when initializing the map 
mapView = MapView(frame: view.bounds, mapInitOptions: options)

地图初始化后设置相机

let coordinate = CLLocationCoordinate2DMake(latitude, longitude)
let options = CameraOptions(center: coordinate, zoom: 10)
//不带动画
mapView.mapboxMap.setCamera(to: options)
//带动画
mapView.camera.fly(to: options, duration: 3)

根据设备位置设置相机

if let locationCoordinate = self.mapView?.location.latestLocation?.coordinate {mapView.mapboxMap.setCamera(to: CameraOptions(center: locationCoordinate, zoom: 15))
}

获取道路限速

import MapboxCoreNavigation
import MapboxNavigationclass LocationManager {private let passiveLocationManager = PassiveLocationManager()private lazy var passiveLocationProvider = PassiveLocationProvider(locationManager: passiveLocationManager)init() {NotificationCenter.default.addObserver(self, selector: #selector(didUpdatePassiveLocation), name: Notification.Name.passiveLocationManagerDidUpdate, object: nil)passiveLocationProvider.startUpdatingLocation()}@objc func didUpdatePassiveLocation(_ notification: Notification) {let speedLimitObj = notification.userInfo?[PassiveLocationManager.NotificationUserInfoKey.speedLimitKey]if (speedLimitObj != nil) {let speedLimit: Measurement<UnitSpeed> = speedLimitObj! as! Measurement<UnitSpeed>print("speedLimit:", speedLimit, speedLimit.value)}}
}

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

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

相关文章

代码随想录算法训练营 动态规划part07

一、爬楼梯 &#xff08;进阶&#xff09; 70. 爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 设跳上 n 级台阶有 f(n) 种跳法。在所有跳法中&#xff0c;青蛙的最后一步只有两种情况&#xff1a; 跳上 1 级或 2 级台阶。 当为 1 级台阶&#xff1a;…

MySQL详解六:备份与恢复

文章目录 1. 数据库备份的分类1.1 从物理和逻辑上分类1.1.1 物理备份1.1.2 逻辑备份 1.2 从数据库的备份策略角度上分类1.2.1 完全备份1.2.2 差异备份1.2.3 增量备份 1.3 常见的备份方法 2. MySQL完全备份2.1 完全备份简介2.2 优点与缺点2.3 实现物理冷备份与恢复2.3.1 实现流程…

AUTOSAR汽车电子嵌入式编程精讲300篇-面向驾驶辅助技术融合算法的日志系统设计与实现(下)

目录 5.4.8 核间通信的设计 5.5 日志系统通信模块的实现 5.5.1 以太网通信的整体架构

Bytebase 2.8.0 - ​全新升级的数据脱敏功能

&#x1f680; 新功能 全新升级的数据脱敏功能&#xff0c;提供更加细化的脱敏和访问权限配置。全新升级的 SQL 编辑器界面。库表同步功能支持 Oracle。支持设置公告。 &#x1f384; 改进 新增基于 MySQL parser 的数据脱敏内核。调整了侧边栏数据库列表&#xff0c;用最近…

学习记忆——宫殿篇——记忆宫殿——记忆桩——工人宿舍

脸盆铁盒白色泡沫绳子电热炉 6. 椅子 7. 门帘 8. 塑料 9. 书 10.安全帽 11. 凳子 暖壶烟灰缸计算器水杯刷子

科目三基础四项(一)

​ 第一天&#xff0c;基础操作&#xff0c;仪表&#xff0c;方向&#xff0c;挡位 按照模块来 1、方向盘两手在两侧 ​ 编辑 转向时的角度&#xff0c;只用&#xff1a;向左540&#xff0c;向右180 向左打和向右打的角度要抵消&#xff0c;回正 掉头向左打满再回 注意…

LaTeX中的[htbp!]选项:控制浮动体的位置

LaTeX中的[htbp!]选项&#xff1a;控制浮动体的位置 在LaTeX中&#xff0c;浮动体&#xff08;例如表格和图像&#xff09;的位置通常由LaTeX的排版算法自动决定。然而&#xff0c;有时我们可能需要更精确地控制浮动体的位置。这时&#xff0c;我们可以使用[htbp!]等选项来指导…

18.3 【Linux】登录文件的轮替(logrotate)

18.3.1 logrotate 的配置文件 logrotate 主要是针对登录文件来进行轮替的动作&#xff0c;他必须要记载“ 在什么状态下才将登录文件进行轮替”的设置。logrotate 这个程序的参数配置文件在&#xff1a; /etc/logrotate.conf /etc/logrotate.d/ logrotate.conf 才是主要的参…

shell 编程

shell 编程 vim-quick-sh window 下 从零开始——PowerShell应用入门&#xff08;全例子入门讲解&#xff09; 各种逗比脚本参考 参考代码1 参考代码2 Linux-Shell脚本编程书籍代码 把平时有用的手动操作做成脚本&#xff0c;这样可以便捷的使用 awk 与 sed 学习&…

代码随想录训练营二刷第三十二天 | 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

代码随想录训练营二刷第三十二天 | 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II 一、 122.买卖股票的最佳时机II 题目链接&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/ 思路&#xff1a;可以当天买当天卖&#xff0c;只要nums[i…

uni-app实现点击复制按钮 复制内容

注意:uni.setClipboardData({})里面的data参数必须是字符串类型这个是大坑 第一种 <view>{{orderId}}</view> //复制的内容 <button click"copy(orderId)">复制</button>copy(value) {uni.setClipboardData({data: value , // 这里是个坑接…

1795_ChibiOS网络书籍阅读_实时系统的一些概念

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 不同的OS在介绍自己的机理的时候都有自己的模型或者抽象概念&#xff0c;ChibiOS也不例外。这里的几个概念需要做一个基本的理解&#xff1a; 1. 进…

解决方案 | 如何构建市政综合管廊安全运行监测系统?

如何构建市政综合管廊安全运行监测系统&#xff1f;WITBEE万宾城市生命线智能监测仪器&#xff0c;5年免维护设计&#xff0c;集成10多项结构与气体健康监测指标&#xff0c;毫秒级快速响应&#xff0c;时刻感知综合管廊运行态势

嵌入式网络接口之MAC芯片与PHY芯片

目录 0. 参考文档 1.嵌入式网络接口简介 2.嵌入式网络硬件架构方案 2.1 SOC内未集成MAC芯片 2.2 SOC内集成MAC芯片 2.3 主流方案总结 2.3 参照实际网卡的说明 3.MII/RMII及MDIO接口 3.1 MII 3.2 RMII 3.3 MDIO 0. 参考文档 网卡构造&#xff1a;MAC与PHY的关系&…

ETLCloud工具让美团数据管理更简单

美团为第三方开发者和商家提供了一系列开放的API接口和工具&#xff0c;使其可以与美团的业务进行对接和集成&#xff0c;从而获得更多的业务机会和增长空间。 通过美团开放平台&#xff0c;第三方开发者和商家可以实现以下功能&#xff1a; 开放接口&#xff1a;美团开放平台…

nacos 作为注册中心时是强一致性还是最终一致性

答案&#xff1a;强一致性 nacos 有两个一致性的协议&#xff0c;AP、CP 持久性数据、配置数据都是CP强一致性 AP&#xff1a;保障各节点的可用性&#xff0c;不必要求强一致性&#xff0c;比如心跳数据等 参考&#xff1a; Nacos内核设计之一致性协议(上)-阿里云开发者社…

乐得瑞推出1拖2功率分配快充线方案,支持数据传输

随着PD3.1协议的市场应用越来越多&#xff0c;一些充电器的Type-C接口的输出功率达到百瓦及以上&#xff0c;如何充分利用好这类充电器设备&#xff0c;乐得瑞电子推出1拖2快充线缆解决方案&#xff0c;支持智能功率分配策略。 上图是乐得瑞1拖2功率分配快充线样线实物&#…

百度地图个性化地图失效问题

百度地图个性地图失效问题 1. 原因1 网上找就是把版本改3.0&#xff0c;但后来发现实际上百度地图分几个版本&#xff0c;传统是升级3.0才支持个性化地图的。webgl版本1.0就可以了支持&#xff0c;因此webgl版本不需要改成3.0。 传统版本的引用&#xff08;以 2.0 版本为例&…

Swagger

访问http://localhost:8080/ 如果不想用UI的部分工作&#xff0c;可以使用Swagger。 Swagger需要两个另外的Dependencies。 swagger ui 和 swagger2 EnableSwagger2 这是项目的可选步骤。 Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2).sele…

文件包含漏洞的 00截断

isset&#xff08;&#xff09;函数若变量不存在则返回 FALSE&#xff1b;若变量存在且其值为NULL&#xff0c;也返回 FALSE。若变量存在且值不为NULL&#xff0c;则返回 TURE %00是被服务器解码为0x00发挥了截断作用。核心是chr(0)字符 00截断上传原理 - 知乎 协议参考地址&…