注册并导航到Account页面。你将需要:
从帐户的tokens页面,你可以复制默认的公共令牌或单击"create a token"按钮来创建新的公共令牌。
从你帐户的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 Maps可以通过Swift Package Manager(SPM)使用。要使用SPM添加Mapbox Maps SDK,你需要配置你的环境以从Mapbox下载它,请确保你已将秘密令牌添加到你的.netrc文件中。
打开Xcode项目,然后转到File > Swift Packages > Add Package Dependency,输入https://github.com/mapbox/mapbox-maps-ios.git作为URL,按Enter键拉入软件包,然后单击Add Package。
在代码中可以用import MapboxMaps引入依赖包。
用户必须先授予您的应用程序权限,然后才能访问有关其位置的信息。添加下列配置到Info.plist。
向用户简要说明应用程序将如何使用其位置数据进行临时访问:
NSLocationWhenInUseUsageDescription
Your precise location is used to calculate turn-by-turn directions, show your location on the map, and help improve the map.
添加LocationAccuracyAuthorizationDescription作为NSLocationTemporaryUsageDescriptionDictionary字典的元素,为用户提供简要解释为什么应用程序中的功能需要其确切位置:
NSLocationTemporaryUsageDescriptionDictionary
LocationAccuracyAuthorizationDescription
Please enable precise location. Turn-by-turn directions only work when precise location data is available.
import UIKit
import MapboxMaps
class 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
:地图坐标系中关于应应用zoom
和bearing
的点。与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)
if let locationCoordinate = self.mapView?.location.latestLocation?.coordinate {
mapView.mapboxMap.setCamera(to: CameraOptions(center: locationCoordinate, zoom: 15))
}