精细导航数据 Feed 会向未针对基于地图的导航指引设计的设备提供仅导航信息。它会提供您提供的元素中的即将到来的操作:
- 图标(左转、右转、掉头)
- 环形交叉路中的转弯数
- 道路名称
- 到达下一个导航步骤或最终目的地的预计距离和时间
您可以使用精细导航 Feed 来创建不适合使用完整 Navigation SDK 界面的体验,例如在小屏幕显示器上。例如,您可以将其用于骑双轮车的用户,您可以投影仅导航指引,帮助他们以最少的干扰更快、更自信地到达目的地。
基本导航显示元素
每个导航步骤的主要字段是完整的道路名称、
操作和步骤的总距离,这些字段可在
GMSNavigationStepInfo中找到。
对于整个行程,您可能需要显示到达当前步骤或目的地的剩余时间和距离,所有这些信息都可在
GMSNavigationNavInfo中找到。右图显示了这些基本导航元素的示例。
设置事件监听器
如需使用仅导航数据,您必须为 didChangeNavInfo 事件实现事件监听器。在事件监听器中,访问行程和步骤信息,以便为用户提供精细导航。
如需实现事件处理程序,地图的视图控制器必须实现
GMSNavigatorListener
协议。如需详细了解如何在适用于 iOS 的
Navigation SDK 中处理事件,请参阅监听导航事件。
处理 didChangeNavInfo 事件
为 didChangeNavInfo 事件创建监听器,以便为您的应用添加精细导航支持。在事件监听器中,使用以下类和枚举来控制精细导航:
GMSNavigationNavInfo- 用于定义导航状态相关信息的类。GMSNavigationStepInfo- 用于定义导航路线中单个步骤相关信息的类。GMSNavigationNavState- 用于定义 Navigation 当前状态的枚举,例如在途、重新规划路线或已停止。GMSNavigationDrivingSide- 用于定义此步骤是在靠右行驶路线还是靠左行驶路线上的枚举。GMSNavigationManeuver- 用于定义要采取的导航操作的枚举,例如左转或右转。
下面显示了 didChangeNavInfo 事件的示例事件监听器:
Swift
// ViewController.swift class SomeViewController: UIViewController { ... mapView.navigator?.add(self); ... } extension SomeViewController: GMSNavigatorListener { func navigator(_ navigator: GMSNavigator, didUpdateNavInfo navInfo: GMSNavigationNavInfo) { // Get the current step information if navInfo.navState == .enroute { if let currentStep = navInfo.currentStep { ... roadNameLabel.text = currentStep.simpleRoadName ... } } } }
Objective-C
// ViewController.h @interface SomeViewController () <GMSNavigatorListener> @end // ViewController.m @implementation SomeViewController // Some initialization code. ... { ... [_mapView.navigator addListener:self]; ... } #pragma mark GMSNavigatorListener - (void)navigator:(GMSNavigator *)navigator didUpdateNavInfo:(GMSNavigationNavInfo *)navInfo { // Get the current step information if (navInfo.navState == GMSNavigationNavStateEnroute) { GMSNavigationStepInfo *currentStep = navInfo.currentStep; if (currentStep) { ... roadNameLabel.text = currentStep.simpleRoadName; ... } } ... }
导航状态
使用 navState 属性获取 Navigation 的当前状态,该状态为以下状态之一:GMSNavigationNavInfo
在途 -
GMSNavigationNavStateEnroute状态表示引导式 式导航处于活动状态,用户正在提供的路线上。 系统会提供有关当前即将到来的操作步骤的信息。重新规划路线 -
GMSNavigationNavStateRerouting表示导航正在进行中,但导航器正在寻找新路线。由于还没有新路线,因此无法提供即将到来的操作步骤。已停止 -
GMSNavigationNavStateStopped表示导航已结束。例如,当用户在应用中退出导航时,导航会停止。在示例应用中,GMSNavigationNavStateStopped状态会清除导航信息显示,以防止显示残留的步骤说明。
车道导航
Navigation SDK 在导航转弯卡片中将车道表示为
GMSNavigationLane 和 GMSNavigationLaneDirection 数据对象。A
GMSNavigationLane 对象表示导航期间的特定车道,并包含
GMSNavigationLaneDirection 对象列表,用于描述可从该车道进行的所有转弯。
系统会使用 recommended 字段标记驾驶员应在车道中采取的建议方向。

车道导航示例
以下代码段展示了上一个屏幕截图中显示的车道的数据表示形式。
// Lane 1
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 2
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 3
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false}]
// Lane 4
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false},
{/*GMSNavigationLaneShape=*/ GMSNavigationLaneShapeNormalRight, /*recommended=*/ false}]
车道导航图片
Navigation SDK 支持为 GMSNavigationStepInfo 传达的每个导航步骤生成车道图片。这些图标符合 CarPlay 的图片尺寸调整
指南。
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];
为操作创建图标
![]()
The GMSNavigationManeuver
枚举定义了导航期间可能发生的每种操作,您可以从 maneuver 属性获取给定步骤的操作
GMSNavigationStepInfo。
您必须创建操作图标,并将其与关联的操作配对。
对于某些操作,您可以设置与图标的一对一映射,例如 GMSNavigationManeuverDestinationLeft 和 GMSNavigationManeuverDestinationRight。不过,由于某些操作与其他操作具有共同特征,因此您可能需要将多个操作映射到单个图标。例如,GMSNavigationManeuverTurnLeft 和 GMSNavigationManeuverOnRampLeft 都可以映射到左转图标。
某些操作包含额外的“顺时针”或“逆时针”标签,SDK 会根据国家/地区的行驶方向确定该标签。例如,在靠左行驶的国家/地区,驾驶员会顺时针方向行驶环形交叉路或掉头,而在靠右行驶的国家/地区,驾驶员会逆时针方向行驶。Navigation SDK 会检测操作是在靠左行驶还是靠右行驶的交通中发生,并输出相应的操作。因此,顺时针操作和逆时针操作的操作图标可能不同。
展开即可查看不同操作的示例图标
| 示例图标 | 精细导航操作 |
|---|---|
![]() |
DEPARTUNKNOWN |
![]() |
STRAIGHTON_RAMP_UNSPECIFIEDOFF_RAMP_UNSPECIFIEDNAME_CHANGE
|
![]() |
TURN_RIGHTON_RAMP_RIGHT
|
![]() |
TURN_LEFTON_RAMP_LEFT
|
![]() |
TURN_SLIGHT_RIGHTON_RAMP_SLIGHT_RIGHTOFF_RAMP_SLIGHT_RIGHT
|
![]() |
TURN_SLIGHT_LEFTON_RAMP_SLIGHT_LEFTOFF_RAMP_SLIGHT_LEFT
|
![]() |
TURN_SHARP_RIGHTON_RAMP_SHARP_RIGHTOFF_RAMP_SHARP_RIGHT
|
![]() |
TURN_SHARP_LEFTON_RAMP_SHARP_LEFTOFF_RAMP_SHARP_LEFT
|
![]() |
TURN_U_TURN_COUNTERCLOCKWISEON_RAMP_U_TURN_COUNTERCLOCKWISEOFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
![]() |
TURN_U_TURN_CLOCKWISEON_RAMP_U_TURN_CLOCKWISEOFF_RAMP_U_TURN_CLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_RIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_STRAIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
|
![]() |
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_LEFT_CLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
|
![]() |
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_U_TURN_CLOCKWISE
|
![]() |
ROUNDABOUT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_CLOCKWISE
|
![]() |
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_EXIT_CLOCKWISE
|
![]() |
MERGE_RIGHTOFF_RAMP_RIGHT
|
![]() |
MERGE_LEFTOFF_RAMP_LEFT
|
![]() |
FORK_RIGHTTURN_KEEP_RIGHTON_RAMP_KEEP_RIGHTOFF_RAMP_KEEP_RIGHT
|
![]() |
FORK_LEFTTURN_KEEP_LEFTON_RAMP_KEEP_LEFTOFF_RAMP_KEEP_LEFT
|
![]() |
MERGE_UNSPECIFIED
|
![]() |
DESTINATION
|
![]() |
DESTINATION_RIGHT
|
![]() |
DESTINATION_LEFT
|
![]() |
FERRY_BOAT
|
![]() |
FERRY_TRAIN
|
使用生成的图标
Navigation SDK 支持为给定的 GMSNavigationStepInfo 生成操作图标。这些图标符合 CarPlay 图片尺寸调整
指南。
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];







































