Mapbox Maps SDK for iOS 官方集成指南,涵盖安装、添加标记、用户位置、自定义数据、样式、相机控制及功能特性
Mapbox iOS 集成模式是一项面向实际任务的技能,主要用于将 Mapbox Maps SDK v11 集成到 Swift、 SwiftUI 和 UIKit 上的 mapbox Maps SDK v11 的 正式模式;当 : 插入和配置 Mapbox Maps SDK 时使用此技能。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
在 iOS 平台上使用 Swift、SwiftUI 和 UIKit 集成 Mapbox Maps SDK v11 的官方推荐模式。
适用场景:
官方资源:
将您的公开令牌(public token)添加至 Info.plist:
MBXAccessToken pk.your_mapbox_token_here
获取您的令牌:请登录 mapbox.com
https://github.com/mapbox/mapbox-maps-ios.git11.0.0 开始选择 “Up to Next Major”替代方案:CocoaPods 或直接下载(详见安装指南)
基础地图:
import SwiftUI
import MapboxMaps
struct ContentView: View {
@State private var viewport: Viewport = .camera(
center: CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194),
zoom: 12
)
var body: some View {
Map(viewport: $viewport)
.mapStyle(.standard)
}
}
启用控件装饰(Ornaments):
Map(viewport: $viewport)
.mapStyle(.standard)
.ornamentOptions(OrnamentOptions(
scaleBar: .init(visibility: .visible),
compass: .init(visibility: .adaptive),
logo: .init(position: .bottomLeading)
))
import UIKit
import MapboxMaps
class MapViewController: UIViewController {
private var mapView: MapView!
override func viewDidLoad() {
super.viewDidLoad()
let options = MapInitOptions(
cameraOptions: CameraOptions(
center: CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194),
zoom: 12
)
)
mapView = MapView(frame: view.bounds, mapInitOptions: options)
mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(mapView)
mapView.mapboxMap.loadStyle(.standard)
}
}
点注释是地图上标注位置最常用的方式。
SwiftUI:
Map(viewport: $viewport) {
PointAnnotation(coordinate: CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194))
.iconImage("custom-marker")
}
UIKit:
// 创建注释管理器(仅需一次,后续复用) var pointAnnotationManager = mapView.annotations.makePointAnnotationManager() // 创建标记 var annotation = PointAnnotation(coordinate: CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194)) annotation.image = .init(image: UIImage(named: "marker")!, name: "marker") annotation.iconAnchor = .bottom // 添加至地图 pointAnnotationManager.annotations = [annotation]
多个标记:
let locations = [
CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194),
CLLocationCoordinate2D(latitude: 37.7849, longitude: -122.4094),
CLLocationCoordinate2D(latitude: 37.7649, longitude: -122.4294)
]
let annotations = locations.map { coordinate in
var annotation = PointAnnotation(coordinate: coordinate)
annotation.image = .init(image: UIImage(named: "marker")!, name: "marker")
return annotation
}
pointAnnotationManager.annotations = annotations
步骤 1:在 Info.plist 中添加定位权限声明:
NSLocationWhenInUseUsageDescription 在地图上显示您的位置
步骤 2:请求权限并启用用户位置指示器(Puck):
import CoreLocation // 请求权限 let locationManager = CLLocationManager() locationManager.requestWhenInUseAuthorization() // 显示用户位置指示器(2D puck) mapView.location.options.puckType = .puck2D() mapView.location.options.puckBearingEnabled = true
// ❌ 避免重复创建新管理器
func updateMarkers() {
let manager = mapView.annotations.makePointAnnotationManager()
manager.annotations = markers
}
// ✅ 创建一次,长期复用
let pointAnnotationManager: PointAnnotationManager
init() {
pointAnnotationManager = mapView.annotations.makePointAnnotationManager()
}
func updateMarkers() {
pointAnnotationManager.annotations = markers
}
// ✅ 一次性批量更新
pointAnnotationManager.annotations = newAnnotations
// ❌ 避免逐个追加
for annotation in newAnnotations {
pointAnnotationManager.annotations.append(annotation)
}
// 在闭包中使用 weak self
mapView.gestures.onMapTap.observe { [weak self] context in
self?.handleTap(context.coordinate)
}.store(in: &cancelables)
// 在 deinit 中清理资源
deinit {
cancelables.forEach { $0.cancel() }
}
// ✅ 标准样式已针对性能优化,为官方推荐 .mapStyle(.standard) // 其他样式仅在特定需求下使用 .mapStyle(.standardSatellite) // 卫星影像
请检查:
MBXAccessToken 是否已正确配置于 Info.plistmapView.mapboxMap.onStyleLoaded.observe { [weak self] _ in
print("样式加载成功")
// 此处添加图层(layers)与数据源(sources)
}.store(in: &cancelables)
.standard 样式(推荐且已优化)当任务需要更深入的实现模式时,请加载以下参考文档:
references/annotations.md — 圆形(Circle)、折线(Polyline)、多边形(Polygon)注释references/location-tracking.md — 相机跟随用户 + 获取当前位置references/custom-data.md — GeoJSON:线、面、点数据的加载、更新与移除references/camera-styles.md — 相机控制(Camera Control)与地图样式(Map Styles)references/interactions.md — 要素集(Featureset)交互、自定义图层点击、长按、手势等相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习