Detail feed data belokan demi belokan

Feed data belokan demi belokan memberikan informasi khusus navigasi ke perangkat yang tidak dirancang untuk panduan navigasi berbasis peta. Fungsi ini menyediakan manuver mendatang dengan elemen yang Anda berikan:

  • ikon (kiri, kanan, U-turn)
  • nomor belokan di bundaran
  • nama jalan
  • perkiraan jarak dan waktu ke langkah navigasi berikutnya atau tujuan akhir

Anda dapat menggunakan feed belokan demi belokan untuk membuat pengalaman saat UI Navigation SDK penuh tidak sesuai, seperti untuk layar kecil. Misalnya, Anda dapat menggunakannya untuk pengendara kendaraan roda dua, tempat Anda dapat memproyeksikan panduan khusus navigasi untuk membantu mereka mencapai tujuan lebih cepat dan lebih yakin dengan gangguan minimal.

Elemen tampilan navigasi yang penting

Layar seluler yang menampilkan belokan kanan yang akan datang dalam 15 meter ke Church
Street. Di bagian bawah layar, waktu yang tersisa untuk mencapai tujuan adalah 13
menit, dan jarak yang tersisa adalah 3,4
mil.

Kolom utama untuk setiap langkah navigasi adalah nama jalan lengkap, manuver, dan total jarak langkah, yang tersedia di GMSNavigationStepInfo.

Untuk perjalanan secara keseluruhan, Anda dapat menampilkan waktu dan jarak yang tersisa ke langkah saat ini atau ke tujuan, yang semuanya tersedia di GMSNavigationNavInfo. Gambar di sebelah kanan menunjukkan contoh elemen navigasi penting ini.

Menyiapkan pemroses peristiwa

Untuk menggunakan data khusus navigasi, Anda harus menerapkan pemroses peristiwa untuk peristiwa didChangeNavInfo. Dalam pemroses peristiwa, akses informasi perjalanan dan langkah untuk memberikan navigasi belokan demi belokan kepada pengguna Anda.

Untuk mengimplementasikan pengendali peristiwa, pengontrol tampilan peta harus mengimplementasikan protokol GMSNavigatorListener. Untuk informasi mendetail tentang cara menangani peristiwa di Navigation SDK untuk iOS, lihat Memproses peristiwa navigasi.

Menangani peristiwa didChangeNavInfo

Buat pemroses untuk peristiwa didChangeNavInfo guna menambahkan dukungan belokan demi belokan ke aplikasi Anda. Di pemroses peristiwa, gunakan class dan enum berikut untuk mengontrol navigasi belokan demi belokan:

  • GMSNavigationNavInfo — Class yang menentukan informasi tentang status navigasi.

  • GMSNavigationStepInfo — Class yang menentukan informasi tentang satu langkah di sepanjang rute navigasi.

  • GMSNavigationNavState — Enum yang menentukan status navigasi saat ini, seperti dalam perjalanan, mengubah rute, atau berhenti.

  • GMSNavigationDrivingSide — Enum yang menentukan apakah langkah ini berada di rute berkendara di sebelah kanan atau kiri.

  • GMSNavigationManeuver — Enum yang menentukan tindakan navigasi yang akan dilakukan, seperti belok kiri atau belok kanan.

Berikut adalah contoh pemroses peristiwa untuk peristiwa 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
          ...
        }
      }
    }
  }

Gunakan properti navState dari GMSNavigationNavInfo untuk mendapatkan status navigasi saat ini, yang merupakan salah satu dari berikut:

  • Dalam perjalanan - Status GMSNavigationNavStateEnroute berarti navigasi terpandu saat ini aktif dan pengguna berada di rute yang disediakan. Informasi tentang langkah manuver mendatang saat ini tersedia.

  • Perubahan rute - GMSNavigationNavStateRerouting berarti navigasi sedang berlangsung, tetapi navigator sedang mencari rute baru. Langkah manuver mendatang tidak tersedia, karena belum ada rute baru.

  • Dihentikan - GMSNavigationNavStateStopped berarti navigasi telah berakhir. Misalnya, navigasi berhenti saat pengguna keluar dari navigasi di aplikasi. Dalam aplikasi contoh, status GMSNavigationNavStateStopped menghapus tampilan info navigasi untuk mencegah petunjuk langkah yang tertunda ditampilkan.

Panduan jalur

Navigation SDK merepresentasikan jalur di kartu belokan navigasi sebagai objek data GMSNavigationLane dan GMSNavigationLaneDirection. Objek GMSNavigationLane mewakili jalur tertentu selama navigasi dan memiliki daftar objek GMSNavigationLaneDirection yang menjelaskan semua belokan yang dapat dilakukan dari jalur ini.

Arah yang direkomendasikan yang harus diambil pengemudi di jalur ditandai menggunakan kolom recommended.

Contoh panduan jalur

Cuplikan berikut mengilustrasikan representasi data jalur yang ditampilkan dalam screenshot sebelumnya.

// 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}]

Gambar panduan jalur

Navigation SDK mendukung pembuatan gambar jalur untuk setiap langkah navigasi seperti yang disampaikan oleh GMSNavigationStepInfo. Ikon ini sesuai dengan panduan ukuran gambar 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];
      

Membuat ikon untuk manuver

ikon manuver

Enum GMSNavigationManeuver menentukan setiap kemungkinan manuver yang dapat terjadi saat menavigasi, dan Anda dapat mendapatkan manuver untuk langkah tertentu dari properti maneuver GMSNavigationStepInfo.

Anda harus membuat ikon manuver dan memasangkannya dengan manuver terkait. Untuk beberapa manuver, Anda dapat menyiapkan pemetaan satu-ke-satu ke ikon, seperti GMSNavigationManeuverDestinationLeft dan GMSNavigationManeuverDestinationRight. Namun, karena beberapa manuver memiliki karakteristik yang sama dengan manuver lainnya, sebaiknya petakan lebih dari satu manuver ke satu ikon. Misalnya, GMSNavigationManeuverTurnLeft dan GMSNavigationManeuverOnRampLeft dapat dipetakan ke ikon belok kiri.

Beberapa manuver berisi label tambahan "Searah Jarum Jam" atau "Berlawanan Jarum Jam", yang ditentukan SDK berdasarkan sisi mengemudi di suatu negara. Misalnya, di negara yang mengemudi di sisi kiri jalan, pengemudi mengambil putaran atau U-turn searah jarum jam, sedangkan negara yang mengemudi di sisi kanan jalan akan berlawanan arah jarum jam. Navigation SDK mendeteksi apakah manuver terjadi di lalu lintas sisi kiri atau kanan dan menghasilkan manuver yang sesuai. Oleh karena itu, ikon manuver Anda mungkin berbeda untuk manuver searah jarum jam versus berlawanan arah jarum jam.

Luaskan untuk melihat contoh ikon untuk berbagai manuver

Ikon Contoh Manuver Belokan Demi Belokan
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

Menggunakan ikon yang dibuat

Navigation SDK mendukung pembuatan ikon manuver untuk GMSNavigationStepInfo tertentu. Ikon ini sesuai dengan panduan ukuran gambar 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];