Memproses peristiwa navigasi

Gunakan panduan ini agar aplikasi Anda dapat memproses dan merespons berbagai peristiwa yang berubah saat pengguna menavigasi di sepanjang rute. Panduan ini tidak mencakup mendefinisikan rute, hanya merespons kejadian di sepanjang rute.

Ringkasan

Navigation SDK for iOS menyediakan pemroses yang terkait dengan lokasi pengguna dan kondisi di sepanjang rute dan data waktu dan jarak yang penting. Pada pengontrol tampilan peta, aplikasi Anda perlu mengadopsi protokol untuk pemroses ini: GMSRoadSnappedLocationProviderListener dan GMSNavigatorListener.

Daftar ini menunjukkan metode pemroses yang tersedia untuk peristiwa navigasi:

Melihat kode

Menyatakan kesesuaian dengan protokol yang diperlukan

Sebelum mengimplementasikan metode navigasi, pengontrol tampilan harus menggunakan metode protokol:

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

Setelah mengadopsi protokol navigasi, setel pemroses ke tampilan pengontrol. Misalnya, Anda dapat menambahkan kode berikut ke viewDidLoad() .

Swift

mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)

Objective-C

[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider
addListener:self];

Menerima atau menghentikan pembaruan lokasi

Pembaruan lokasi diperlukan untuk menampilkan progres pengguna di peta.

Instance location mengekspos properti berikut:

Properti lokasi Deskripsi
ketinggian Ketinggian saat ini.
coordinate.latitude Koordinat lintang yang ditangkap jalan saat ini.
coordinate.longitude Koordinat bujur yang ditangkap jalan saat ini.
kursus Bearing saat ini dalam derajat.
kecepatan Kecepatan saat ini.
timestamp Tanggal/waktu pembacaan saat ini.

Untuk menerima pembaruan lokasi berkelanjutan, panggil mapView.roadSnappedLocationProvider.startUpdatingLocation , dan gunakan GMSRoadSnappedLocationProviderListener untuk menangani didUpdateLocation peristiwa.

Contoh berikut menunjukkan cara memanggil startUpdatingLocation:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatingLocation];

Kode berikut membuat GMSRoadSnappedLocationProviderListener yang menangani peristiwa didUpdateLocation.

Swift

func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider,
didUpdate location: CLLocation) { print("Location: \(location.description)") }

Objective-C

-   (void)locationProvider:(GMSRoadSnappedLocationProvider *)locationProvider
    didUpdateLocation:(CLLocation *)location { NSLog(@"Location: %@",
    location.description); }

Untuk menerima pembaruan lokasi saat aplikasi berada di latar belakang, setel allowsBackgroundLocationUpdates ke benar (true):

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

Mendeteksi peristiwa kedatangan

Aplikasi Anda menggunakan peristiwa didArriveAtWaypoint untuk mendeteksi saat tujuan memiliki tercapai. Anda dapat melanjutkan panduan dan maju ke titik jalan berikutnya dengan memanggil continueToNextDestination(), lalu mengaktifkan kembali panduan. Aplikasi Anda harus mengaktifkan kembali panduan setelah memanggil continueToNextDestination().

Setelah aplikasi memanggil continueToNextDestination, navigator tidak lagi memiliki data tentang tujuan sebelumnya. Jika Anda ingin menganalisis informasi tentang segmen rute, Anda harus mengambilnya dari navigator sebelum memanggil continueToNextDestination().

Contoh kode berikut menunjukkan metode untuk menangani didArriveAtWaypoint acara:

Swift

func navigator(_ navigator: GMSNavigator, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint { NSLog(@"You have
    arrived at: %@", waypoint.title); [_mapView.navigator
    continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }

Menerima pembaruan perubahan rute

Untuk menerima notifikasi setiap kali rute diubah, buat metode untuk menangani peristiwa navigatorDidChangeRoute. Anda dapat mengakses rute baru dengan menggunakan properti routeLegs dan currentRouteLeg dari GMSNavigator.

Swift

func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }

Objective-C

-   (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route
    has changed."); }

Menerima pembaruan waktu ke tujuan

Untuk menerima waktu berkelanjutan hingga update tujuan, buat metode untuk menangani Peristiwa didUpdateRemainingTime. Parameter time memberikan estimasi waktu, dalam detik, hingga tujuan berikutnya tercapai.

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time:
TimeInterval) { print("Time to next destination: \(time)") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateRemainingTime:(NSTimeInterval)time { NSLog(@"Time to next
    destination: %f", time); }

Untuk menetapkan perubahan minimum dalam perkiraan waktu ke tujuan berikutnya, tetapkan Properti timeUpdateThreshold di GMSNavigator. Nilainya ditentukan dalam detik. Jika properti ini tidak disetel, layanan akan menggunakan nilai default satu kedua.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Menerima pembaruan jarak ke tujuan

Untuk menerima jarak berkelanjutan ke pembaruan tujuan, buat metode yang akan ditangani peristiwa didUpdateRemainingDistance. Parameter distance memberikan perkiraan jarak, dalam meter, ke tujuan berikutnya.

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distance:
CLLocationDistance) { let miles = distance * 0.00062137 print("Distance to next
destination: \(miles) miles.") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateRemainingDistance:(CLLocationDistance)distance { double miles =
    distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Distance to
    next destination: %.2f.", miles]); }

Untuk menyetel perubahan minimum dalam perkiraan jarak ke tujuan berikutnya, setel atribut Properti distanceUpdateThreshold di GMSNavigator (nilai ditentukan di meter). Jika properti ini tidak disetel, layanan akan menggunakan nilai default satu pengukur.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Menerima info terbaru lalu lintas

Untuk menerima pembaruan berkelanjutan dari arus lalu lintas untuk rute yang tersisa, Buat metode untuk menangani peristiwa didUpdateDelayCategory. Panggilan ke delayCategoryToNextDestination menampilkan GMSNavigationDelayCategory yang memberikan nilai 0 hingga 3. Pembaruan pada kategori didasarkan pada posisi pengguna aplikasi. Jika data lalu lintas tidak tersedia, GMSNavigationDelayCategory menampilkan 0. Angka 1-3, menunjukkan peningkatan mengalir dari ringan ke berat.

Swift

func navigator(_ navigator: GMSNavigator, didUpdate delayCategory:
GMSNavigationDelayCategory) { print("Traffic flow to next destination:
\(delayCategory)") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory {
    NSLog(@"Traffic flow to next destination: %ld", (long)delayCategory); }

Properti GMSNavigationDelayCategory memperlihatkan tingkat penundaan berikut:

Kategori penundaan Deskripsi
GMSNavigationDelayCategoryNoData 0 - Tidak tersedia, tidak ada data untuk traffic, atau :
rute tersebut.
GMSNavigationDelayCategoryHeavy 1 - Berat.
GMSNavigationDelayCategoryMedium 2 - Sedang.
GMSNavigationDelayCategoryLight 3 - Ringan.

Menerima update kecepatan.

Untuk menerima update saat pengemudi melebihi batas kecepatan, buat metode untuk menangani peristiwa didUpdateSpeedingPercentage.

Swift

// Listener to handle speeding events. func navigator( _ navigator:
GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) {
print("Speed is \(percentageAboveLimit) above the limit.") }

Objective-C

// Listener to handle speeding events. - (void)navigator:(GMSNavigator
*)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit {
NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit); }

Mengubah mode pencahayaan yang disarankan

Untuk menerima pembaruan perkiraan perubahan pencahayaan, buat metode untuk menangani peristiwa didChangeSuggestedLightingMode.

Swift

// Define a listener for suggested changes to lighting mode. func navigator(_
navigator: GMSNavigator, didChangeSuggestedLightingMode lightingMode:
GMSNavigationLightingMode) { print("Suggested lighting mode has changed:
\(String(describing: lightingMode))")

 // Make the suggested change. mapView.lightingMode = lightingMode }

Objective-C

// Define a listener for suggested changes to lighting mode.
-(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode:
(GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested lighting mode has
changed: %ld", (long)lightingMode);

 // Make the suggested change. _mapView.lightingMode = lightingMode; }