Bật nguồn cấp dữ liệu từng chặng

Nguồn cấp dữ liệu từng chặng cung cấp thông tin chỉ đường cho các thiết bị không được thiết kế cho hướng dẫn chỉ đường dựa trên bản đồ. Hướng dẫn này cung cấp các lần diễn tập sắp tới với các phần tử mà bạn cung cấp:

  • biểu tượng (trái, phải, quay đầu)
  • rẽ số tại đường vòng
  • tên đường
  • khoảng cách và thời gian ước tính đến bước di chuyển tiếp theo hoặc điểm đến cuối cùng

Bạn có thể sử dụng nguồn cấp dữ liệu theo từng chặng để tạo ra trải nghiệm mà giao diện người dùng SDK điều hướng đầy đủ không phù hợp, chẳng hạn như đối với màn hình nhỏ. Ví dụ: bạn có thể sử dụng tính năng này cho những người lái xe hai bánh, trong đó bạn có thể chiếu hướng dẫn chỉ chỉ đường để giúp họ đến điểm đến nhanh hơn và tự tin hơn mà không bị phân tâm.

Phần tử hiển thị thiết yếu với thành phần điều hướng

Trên màn hình thiết bị di động, hiển thị ngã rẽ trái sắp tới cách đại lộ W Ahwanee 30 mét. Ở cuối màn hình, thời gian còn lại để tới điểm đến là 46 phút và quãng đường còn lại là 39 dặm.

Các trường chính cho mỗi bước di chuyển là tên đường đầy đủ, phương thức di chuyển và tổng quãng đường của bước có sẵn trong GMSNavigationStepInfo.

Đối với tổng thể chuyến đi, bạn nên hiển thị thời gian và khoảng cách còn lại đến bước hiện tại hoặc đến đích đến. Tất cả thông tin này đều có trong GMSNavigationNavInfo. Hình ảnh bên phải cho thấy một ví dụ về các thành phần điều hướng thiết yếu này.

Thiết lập trình nghe sự kiện

Để sử dụng dữ liệu chỉ điều hướng, bạn phải triển khai một trình nghe sự kiện cho sự kiện didChangeNavInfo. Trong trình nghe sự kiện, hãy truy cập vào thông tin chuyến đi và thông tin bước để cung cấp tính năng chỉ đường từng chặng cho người dùng.

Để triển khai các trình xử lý sự kiện, trình kiểm soát chế độ xem của bản đồ phải triển khai giao thức GMSNavigatorListener. Để biết thông tin chi tiết về cách xử lý các sự kiện trong SDK điều hướng dành cho iOS, hãy xem phần Nghe sự kiện điều hướng.

Xử lý sự kiện wasChangeNavInfo

Tạo một trình nghe cho sự kiện didChangeNavInfo để thêm tính năng hỗ trợ từng chặng vào ứng dụng của bạn. Trong trình nghe sự kiện, hãy sử dụng các lớp và enum sau để điều khiển tính năng chỉ đường theo từng chặng:

  • GMSNavigationNavInfo – Lớp xác định thông tin về trạng thái điều hướng.

  • GMSNavigationStepInfo – Lớp xác định thông tin về một bước trong một tuyến điều hướng.

  • GMSNavigationNavState – Enum xác định trạng thái hiện tại của một thành phần điều hướng, chẳng hạn như đang chuyển tuyến, định tuyến lại hoặc đã dừng.

  • GMSNavigationDrivingSide – Enum xác định xem bước này đang đi trên tuyến đường lái xe bên phải hay tuyến đường lái xe bên trái.

  • GMSNavigationManeuver– Enum xác định hành động điều hướng cần thực hiện, chẳng hạn như rẽ trái hoặc rẽ phải.

Dưới đây là ví dụ về trình nghe sự kiện cho sự kiện 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
          ...
        }
      }
    }
  }

Sử dụng thuộc tính navState của GMSNavigationNavInfo để nhận trạng thái điều hướng hiện tại, một trong các trạng thái sau:

  • Enroute – Trạng thái GMSNavigationNavStateEnroute có nghĩa là tính năng chỉ đường có hướng dẫn hiện đang hoạt động và người dùng đang ở trên tuyến đường được cung cấp. Hiện đã có thông tin về bước điều động sắp tới.

  • Đang định tuyến lạiGMSNavigationNavStateRerouting có nghĩa là trình điều hướng đang diễn ra nhưng trình điều hướng đang tìm một tuyến mới. Chưa có bước điều động sắp tới vì chưa có tuyến đường mới nào.

  • Đã dừngGMSNavigationNavStateStopped có nghĩa là lộ trình chỉ đường đã kết thúc. Ví dụ: tính năng chỉ đường sẽ dừng khi người dùng thoát khỏi quy trình chỉ đường trong ứng dụng. Trong ứng dụng mẫu, trạng thái GMSNavigationNavStateStopped sẽ xoá màn hình thông tin chỉ đường để ngăn các hướng dẫn bước còn lại xuất hiện.

Tạo biểu tượng cho các thao tác

Enum GMSNavigationManeuver xác định từng thao tác có thể xảy ra trong khi điều hướng và bạn có thể điều khiển một bước nhất định từ thuộc tính maneuver của GMSNavigationStepInfo.

Bạn phải tạo biểu tượng thao tác và ghép các biểu tượng này với các thao tác có liên quan. Đối với một số thao tác, bạn có thể thiết lập mối liên kết một với một với một biểu tượng, chẳng hạn như GMSNavigationManeuverDestinationLeftGMSNavigationManeuverDestinationRight. Tuy nhiên, vì một số thao tác có chung đặc điểm với các thao tác khác, nên có thể bạn cần liên kết nhiều thao tác với một biểu tượng duy nhất. Ví dụ: cả GMSNavigationManeuverTurnLeftGMSNavigationManeuverOnRampLeft đều có thể ánh xạ tới biểu tượng rẽ trái.

Một số thao tác có thêm nhãn "Clockwise" hoặc "CounterClockwise" mà SDK xác định dựa trên phía lái xe của một quốc gia. Ví dụ: ở các quốc gia nơi lái xe ở phía bên trái đường, người lái xe sẽ đi vòng quanh hoặc quay đầu theo chiều kim đồng hồ, trong khi các quốc gia phía bên phải đường lại đi ngược chiều kim đồng hồ. SDK điều hướng phát hiện xem một thao tác xảy ra trong lưu lượng truy cập bên trái hay bên phải và đưa ra thao tác thích hợp. Do đó, biểu tượng thao tác có thể khác nhau khi thao tác theo chiều kim đồng hồ so với thao tác ngược chiều kim đồng hồ.

Mở rộng để xem các biểu tượng ví dụ cho các thao tác khác nhau

Biểu tượng mẫu Thao tác từng chặng
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