啟用即時路線導航資料動態饋給

即時路線資料動態饋給為未針對地圖式導航指引的裝置提供導航資訊。這個外掛程式能為您提供立即可用的元素:

  • 圖示 (左、右、迴轉)
  • CANNOT TRANSLATE
  • 路名
  • 到達下個導航步驟或最終目的地的預估距離和所需時間

您可以使用即時路線動態饋給,打造不適合完整 Navigation SDK UI 的體驗 (例如小螢幕螢幕)。舉例來說,您可以將這項功能用於雙輪車乘客,藉此投影純導航的指引,在盡量減少干擾的情況下,幫助他們更快抵達目的地。

基本導覽顯示元素

手機畫面顯示即將向來右轉彎,60 英尺後轉向教堂街。從螢幕底部前往目的地的剩餘時間為 13 分鐘,剩餘距離為 2.1 英里。

每個導覽步驟的主要欄位包括完整的道路名稱、路線和該步驟的總距離,詳情請參閱 GMSNavigationStepInfo

針對整趟行程,建議您顯示與目前步驟或目的地之間的剩餘時間和距離,而這些全部都可在 GMSNavigationNavInfo 中取得。右圖顯示了這些基本導覽元素的範例。

設定事件監聽器

如要使用僅限導覽的資料,您必須為 didChangeNavInfo 事件實作事件監聽器。在事件監聽器中,您可以存取行程和步驟資訊,為使用者提供即時路線導航功能。

如要導入事件處理常式,地圖的檢視控制器必須導入 GMSNavigatorListener 通訊協定。如要進一步瞭解如何在 iOS 適用的 Navigation SDK 中處理事件,請參閱「監聽導覽事件」。

處理 didChangeNavInfo 事件

didChangeNavInfo 事件建立事件監聽器,為應用程式新增即時路線支援功能。在事件監聽器中,請使用下列類別和列舉控管即時路線導航:

以下顯示 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
          ...
        }
      }
    }
  }

使用 GMSNavigationNavInfonavState 屬性取得導覽目前的狀態,可能為下列其中一種:

  • EnrouteGMSNavigationNavStateEnroute 狀態表示引導式導航目前有效,且使用者正在提供的路線。可提供目前即將執行操作步驟的相關資訊。

  • Rerouting - GMSNavigationNavStateRerouting 表示導航正在進行中,但導航工具正在尋找新路徑。目前沒有任何新路線,因此無法進行接下來的操縱步驟。

  • 已停止 - GMSNavigationNavStateStopped 表示導航已結束。舉例來說,當使用者在應用程式中結束導航時,導航就會停止。在範例應用程式中,GMSNavigationNavStateStopped 狀態會清除導覽資訊顯示畫面,以防止顯示無效的步驟指示。

車道指引

Navigation SDK 會將導航轉彎資訊卡中的車道顯示為 GMSNavigationLaneGMSNavigationLaneDirection 資料物件。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 列舉會定義導覽時可能發生的每個可能方式,您可以從 GMSNavigationStepInfomaneuver 屬性中取得特定步驟的配置。

您必須建立手勢圖示,並將其與相關操作配對。以某些方式來說,您可以設定與圖示之間的一對一對應,例如 GMSNavigationManeuverDestinationLeftGMSNavigationManeuverDestinationRight。不過,由於有些做法會與其他操作共用特性,因此您可能會想將多個操控方式對應至單一圖示。舉例來說,GMSNavigationManeuverTurnLeftGMSNavigationManeuverOnRampLeft 都能對應到左側轉彎圖示。

部分方式會包含額外的「順時針」或「逆時針」標籤,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];