Mapbox 导航为您提供将逐向导航功能添加到 iOS 应用程序所需的所有工具。
使用我们即插即用的逐向导航 NavigationViewController
在几分钟内启动并运行,或者使用我们的核心组件(用于路线规划和导航)构建完全自定义的逐向导航应用程序。
Mapbox 导航 SDK 和 Core Navigation 与在 Xcode 15.0 及更高版本中使用 Swift 5.9 编写的应用程序兼容。Mapbox 导航和 Mapbox Core Navigation 框架可在 iOS 14.0 及更高版本上运行。
Mapbox 导航 SDK 也可用于 Android。
要在应用程序中使用 Swift Package Manager 安装 SDK
DOWNLOADS:READ
作用域的访问令牌。请注意:这与您的生产 Mapbox API 令牌不同。请务必妥善保管,不要将其插入任何 Info.plist 文件中。 如果您的主目录中尚不存在名为 .netrc
的文件,请创建一个,然后将以下行添加到文件末尾machine api.mapbox.com
login mapbox
password PRIVATE_MAPBOX_API_TOKEN
DOWNLOADS:READ
作用域。在 Xcode 中,前往“File”‣“Swift Packages”‣“Add Package Dependency”。
输入 https://github.com/mapbox/mapbox-navigation-ios.git
作为软件包仓库,然后点击“Next”。
将“Rules”设置为“Version”、“Up to Next Major”,然后输入 3.1.0
作为最低版本要求。点击“Next”。
要在另一个软件包(而不是应用程序)中安装 MapboxNavigation 框架,请运行 swift package init
以创建 Package.swift,然后添加以下依赖项
// Latest stable release
.package(url: "https://github.com/mapbox/mapbox-navigation-ios.git", from: "3.1.0")
Mapbox API 和矢量瓦片需要 Mapbox 账户和 API 访问令牌。在项目编辑器中,选择应用程序目标,然后转到“Info”标签页。在“Custom iOS Target Properties”部分下,将 MBXAccessToken
设置为您的访问令牌。您可以从 Mapbox 账户页面 获取访问令牌。
为了使 SDK 能够在用户沿着路线移动时跟踪用户的位置,请将 NSLocationWhenInUseUsageDescription
设置为
在地图上显示您的位置并帮助改进地图。
用户期望 SDK 即使在其他应用程序可见或设备锁定时也能继续跟踪用户的位置并提供语音指令。转到“Signing & Capabilities”标签页。在“Background Modes”部分下,启用“Audio, AirPlay, and Picture in Picture”和“Location updates”。(或者,将 audio
和 location
值添加到“Info”标签页中的 UIBackgroundModes
数组。)
现在导入相关模块并呈现新的 NavigationViewController
。如果您的应用程序的 UI 在 Interface Builder 中布局,您也可以从 storyboard 推送到导航视图控制器。
此仓库包含一个测试应用程序,用于演示各种导航 SDK 功能。配置私有和公共令牌以运行此应用程序。
import MapboxDirections
import MapboxNavigationCore
import MapboxNavigationUIKit
import UIKit
import CoreLocation
// Define the Mapbox Navigation entry point.
let mapboxNavigationProvider = MapboxNavigationProvider(coreConfig: .init())
lazy var mapboxNavigation = mapboxNavigationProvider.mapboxNavigation
// Define two waypoints to travel between
let origin = Waypoint(coordinate: CLLocationCoordinate2D(latitude: 38.9131752, longitude: -77.0324047), name: "Mapbox")
let destination = Waypoint(coordinate: CLLocationCoordinate2D(latitude: 38.8977, longitude: -77.0365), name: "White House")
// Set options
let options = NavigationRouteOptions(waypoints: [origin, destination])
// Request a route using RoutingProvider
let request = mapboxNavigation.routingProvider().calculateRoutes(options: options)
Task {
switch await request.result {
case .failure(let error):
print(error.localizedDescription)
case .success(let navigationRoutes):
// Pass the generated navigation routes to the the NavigationViewController
let navigationOptions = NavigationOptions(mapboxNavigation: mapboxNavigation,
voiceController: mapboxNavigationProvider.routeVoiceController,
eventsManager: mapboxNavigationProvider.eventsManager())
let navigationViewController = NavigationViewController(navigationRoutes: navigationRoutes,
navigationOptions: navigationOptions)
navigationViewController.modalPresentationStyle = .fullScreen
present(navigationViewController, animated: true, completion: nil)
}
}
有关更多详细信息,请查阅 API 参考文档。
您可以自定义外观,使其与应用程序的其余部分融为一体。
class CustomStandardDayStyle: StandardDayStyle {
required init() {
super.init()
mapStyleURL = URL(string: "mapbox://styles/mapbox/satellite-streets-v9")!
styleType = .night
}
override func apply() {
super.apply()
BottomBannerView.appearance(for: UITraitCollection(userInterfaceIdiom: .phone)).backgroundColor = .orange
BottomBannerView.appearance(for: UITraitCollection(userInterfaceIdiom: .pad)).backgroundColor = .orange
}
}
然后使用您的样式初始化 NavigationViewController
let navigationOptions = NavigationOptions(
mapboxNavigation: navigationProvider.mapboxNavigation,
voiceController: navigationProvider.routeVoiceController,
eventsManager: navigationProvider.eventsManager(),
styles: [CustomStandardDayStyle()]
)
NavigationViewController(navigationRoutes: navigationRoutes, navigationOptions: navigationOptions)
Mapbox iOS 导航 SDK 根据 Mapbox 服务条款发布。有关详细信息,请参阅 LICENSE.md。