精细导航数据 Feed 可为未 专为基于地图的导航指导而设计。它能提供即将开始的机操作 提供的元素:
- 图标(向左、向右、调头)
- 在环岛中转弯数字
- 道路名称
- 预计距离和时间 目标账号
您可以使用精细导航来打造 Navigation SDK 界面不合适,例如对于小屏幕显示屏。对于 例如,您可以对骑双轮机动车的乘客使用此设置, 项目导航仅提供指导,帮助他们更快到达目的地 轻松自信、尽可能减少干扰
基本导航显示元素
每个导航路段的主要字段为完整的道路名称、 具体位置包括: GMSNavigationStepInfo.
对于整个行程,您可能希望显示剩余时间和 到当前路段或到目的地的距离,所有这些都可以 GMSNavigationNavInfo。 右图显示了这些基本导航元素的示例。
设置事件监听器
要使用仅限导航的数据,必须为
didChangeNavInfo
事件。在事件监听器中,访问行程和
步骤信息,为您的用户提供精细导航。
要实现事件处理程序,地图的视图控制器必须实现
GMSNavigatorListener
协议。如需详细了解如何在 iOS 版 Navigation SDK 中处理事件,
请参阅监听导航事件。
处理 didChangeNavInfo
事件
为 didChangeNavInfo
事件创建监听器,以添加精细导航支持
。在事件监听器中,使用以下类和枚举来控制
精细导航:
GMSNavigationNavInfo
— 定义有关导航状态信息的类。GMSNavigationStepInfo
– 类,用于定义有关导航路线上的单个路段的信息。GMSNavigationNavState
— 定义导航的当前状态的枚举,例如路线、 重新规划路线,或被停止。GMSNavigationDrivingSide
— 枚举定义此路段是在右边路上还是在左边驾车路线上。GMSNavigationManeuver
— 定义要执行的导航操作的枚举,例如左转或右转。
以下是 didChangeNavInfo
事件的事件监听器示例:
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; ... } } ... }
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 ... } } } }
导航状态
使用 GMSNavigationNavInfo
的 navState
属性
来获取导航的当前状态,可以是以下状态之一:
途中 -
GMSNavigationNavStateEnroute
状态表示引导式导航 当前为活跃状态,且用户在提供的路由上。相关信息 当前即将进行的操作步骤可用。正在重选路线 -
GMSNavigationNavStateRerouting
表示导航正在进行中,但是 导航器正在寻找新路线。即将开始的动作步骤 可用,因为还没有新路线。已停止 -
GMSNavigationNavStateStopped
表示导航已结束。例如: 当用户退出应用中的导航时,导航会停止。在示例应用中,GMSNavigationNavStateStopped
状态会清除导航信息显示, 阻止显示延迟的步骤说明。
车道导航
Navigation SDK 将导航转弯卡片中的车道表示为
GMSNavigationLane
和 GMSNavigationLaneDirection
数据对象。答
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];
创建用于操作的图标
GMSNavigationManeuver
枚举定义了导航时可能发生的每种操作,
可以通过 maneuver
属性获取指定步骤的操作
GMSNavigationStepInfo
。
您必须创建操作图标,并将其与相关操作对应起来。
对于某些操作,您可以设置图标的一对一映射,例如
GMSNavigationManeuverDestinationLeft
和
GMSNavigationManeuverDestinationRight
。然而,由于一些操作会产生
和其他操作,那么您可能需要映射多个
更改单个图标。例如 GMSNavigationManeuverTurnLeft
和
GMSNavigationManeuverOnRampLeft
都可以映射到左侧转弯图标。
有些操作包含或“逆时针”标签、 SDK 根据所在国家/地区的驾驶端来确定。例如: 在驾驶位于道路左侧的国家/地区,驾驶员会选择 在顺时针方向掉头或调头,在道路右侧 按逆时针方向发展Navigation SDK 会检测出 操作发生在左侧还是右侧流量, 适当的操作。因此,您的操作图标可能会有所不同 进行顺时针和逆时针运动
展开即可查看不同操作的示例图标
示例图标 | 精细导航 |
---|---|
DEPART UNKNOWN |
|
STRAIGHT ON_RAMP_UNSPECIFIED OFF_RAMP_UNSPECIFIED NAME_CHANGE
|
|
TURN_RIGHT ON_RAMP_RIGHT
|
|
TURN_LEFT ON_RAMP_LEFT
|
|
TURN_SLIGHT_RIGHT ON_RAMP_SLIGHT_RIGHT OFF_RAMP_SLIGHT_RIGHT
|
|
TURN_SLIGHT_LEFT ON_RAMP_SLIGHT_LEFT OFF_RAMP_SLIGHT_LEFT
|
|
TURN_SHARP_RIGHT ON_RAMP_SHARP_RIGHT OFF_RAMP_SHARP_RIGHT
|
|
TURN_SHARP_LEFT ON_RAMP_SHARP_LEFT OFF_RAMP_SHARP_LEFT
|
|
TURN_U_TURN_COUNTERCLOCKWISE ON_RAMP_U_TURN_COUNTERCLOCKWISE OFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
|
TURN_U_TURN_CLOCKWISE ON_RAMP_U_TURN_CLOCKWISE OFF_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_RIGHT OFF_RAMP_RIGHT
|
|
MERGE_LEFT OFF_RAMP_LEFT
|
|
FORK_RIGHT TURN_KEEP_RIGHT ON_RAMP_KEEP_RIGHT OFF_RAMP_KEEP_RIGHT
|
|
FORK_LEFT TURN_KEEP_LEFT ON_RAMP_KEEP_LEFT OFF_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];