即時路線資料動態饋給為未針對地圖式導航指引的裝置提供導航資訊。這個外掛程式能為您提供立即可用的元素:
- 圖示 (左、右、迴轉)
- CANNOT TRANSLATE
- 路名
- 到達下個導航步驟或最終目的地的預估距離和所需時間
您可以使用即時路線動態饋給,打造不適合完整 Navigation SDK UI 的體驗 (例如小螢幕螢幕)。舉例來說,您可以將這項功能用於雙輪車乘客,藉此投影純導航的指引,在盡量減少干擾的情況下,幫助他們更快抵達目的地。
基本導覽顯示元素
每個導覽步驟的主要欄位包括完整的道路名稱、路線和該步驟的總距離,詳情請參閱 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
屬性取得導覽目前的狀態,可能為下列其中一種:
Enroute:
GMSNavigationNavStateEnroute
狀態表示引導式導航目前有效,且使用者正在提供的路線。可提供目前即將執行操作步驟的相關資訊。Rerouting -
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
列舉會定義導覽時可能發生的每個可能方式,您可以從 GMSNavigationStepInfo
的 maneuver
屬性中取得特定步驟的配置。
您必須建立手勢圖示,並將其與相關操作配對。以某些方式來說,您可以設定與圖示之間的一對一對應,例如 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];