Memproses peristiwa navigasi

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

Ringkasan

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

Daftar ini menunjukkan metode pemroses yang tersedia untuk peristiwa navigasi:

Melihat kode

Mendeklarasikan kesesuaian dengan protokol yang diperlukan

Sebelum menerapkan metode navigasi, pengontrol tampilan harus mengadopsi protokol:

Swift

kelas ViewController: UIViewController, GMSNavigatorListener, GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <gmsnavigatorpemroses, gmsroadsnappedlocationproviderListener=""></gmsnavigator fokus,>

@end

Setelah mengadopsi protokol navigasi, tetapkan pemroses ke pengontrol tampilan. Misalnya, Anda dapat menambahkan kode berikut ke metode 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 kemajuan pengguna di peta.

Instance location mengekspos properti berikut:

Properti lokasi Deskripsi
ketinggian Ketinggian saat ini.
coordinate.latitude Koordinat lintang hasil jepretan jalan saat ini.
coordinate.longitude Koordinat bujur snap 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 peristiwa didUpdateLocation.

Contoh berikut menunjukkan cara memanggil startUpdatingLocation:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatesLocation];

Kode berikut akan membuat GMSRoadSnappedLocationProviderListener yang menangani peristiwa didUpdateLocation.

Swift

func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider, didUpdate location: CLLocation) { print("Lokasi: (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, tetapkan allowsBackgroundLocationUpdates ke benar (true):

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YA;

Mendeteksi peristiwa kedatangan

Aplikasi Anda menggunakan peristiwa didArriveAtWaypoint untuk mendeteksi kapan tujuan telah 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 ingin menganalisis informasi tentang segmen rute, Anda harus mengambilnya dari navigator sebelum memanggil continueToNextDestination().

Contoh kode berikut menunjukkan metode untuk menangani peristiwa didArriveAtWaypoint:

Swift

func navigator(_ navigator: GMSNavigator, didtibaAt titik jalan: GMSNavigationWaypoint) { print("Anda telah tiba di: (titik jalan.title)") mapView.navigator?.continueToNextDestination() mapView.navigator?.isGuidelinesActive = true }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator did \nAtWaypoint:(GMSNavigationWaypoint *) positif titik jalan { NSLog(@"Anda telah tiba di: %@", waypoint.title); [_mapView.navigator continueToNextDestination]; _mapView.navigator.guideanceActive = YES; }

Menerima pembaruan perubahan rute

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

Swift

func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("Rute telah berubah.") }

Objective-C

  • (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"Rute telah berubah."); }

Waktu penerimaan pembaruan tujuan

Untuk menerima pembaruan waktu tujuan berkelanjutan, 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("Waktu ke tujuan berikutnya: (waktu)") }

Objective-C

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

Untuk menetapkan perubahan minimum dalam estimasi waktu ke tujuan berikutnya, tetapkan properti timeUpdateThreshold pada GMSNavigator. Nilai ditentukan dalam detik. Jika properti ini tidak ditetapkan, layanan akan menggunakan nilai default satu detik.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Menerima jarak ke pembaruan tujuan

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

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance: CLLocationDistance) { let mil = jarak * 0.00062137 print("Jarak ke tujuan berikutnya: (mil) mil.") }

Objective-C

  • }

Untuk menetapkan perubahan minimum dalam perkiraan jarak ke tujuan berikutnya, tetapkan properti distanceUpdateThreshold pada GMSNavigator (nilai ditentukan dalam meter). Jika properti ini tidak ditetapkan, layanan akan menggunakan nilai default satu meter.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Menerima pembaruan lalu lintas

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

Swift

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

Objective-C

  • }

Properti GMSNavigationDelayCategory mengekspos tingkat keterlambatan berikut:

Tunda kategori Deskripsi
GMSNavigationDelayCategoryNoData 0 - Tidak tersedia, tidak ada data untuk traffic atau :
rute.
GMSNavigationDelayCategoryHeavy 1 - Berat.
GMSNavigationDelayCategoryMedium 2 - Sedang.
GMSNavigationDelayCategoryLight 3 - Terang.

Menerima info terbaru terkait kecepatan

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

Swift

// Pemroses untuk menangani peristiwa yang mengebut. func navigator( _ navigator: GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) { print("Speed is (percentageAboveLimit) above the limit.") }

Objective-C

// Pemroses untuk menangani peristiwa kecepatan. - (void)navigator:(GMSNavigator *)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit { NSLog(@"Speed is %f percentage above the limit.", percentageAboveLimit); }

Mengubah mode pencahayaan yang disarankan

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

Swift

// Menentukan pemroses untuk perubahan yang disarankan pada mode pencahayaan. func navigator(_ navigator: GMSNavigator, didChangeSuggestedLightingMode lightsMode: GMSNavigationLightingMode) { print("Disarankan mode pencahayaan telah berubah: (String(describing: lightsMode))")

// Lakukan perubahan yang disarankan. mapView.lightingMode = lightsMode }

Objective-C

// Menentukan pemroses untuk perubahan yang disarankan pada mode pencahayaan. -(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode: (GMSNavigationLightingMode)lightingMode { NSLog(@"Saran mode pencahayaan telah berubah: %ld", (long)lightingMode);

// Lakukan perubahan yang disarankan. _mapView.lightingMode = lightsMode; }