Gunakan panduan ini untuk memungkinkan aplikasi Anda memproses dan merespons berbagai peristiwa yang berubah saat pengguna menavigasi di sepanjang rute. Panduan ini tidak membahas cara menentukan rute, hanya cara merespons peristiwa di sepanjang rute.
Ringkasan
Navigation SDK for iOS menyediakan pemroses yang terkait dengan lokasi pengguna dan kondisi di sepanjang rute serta data waktu dan jarak yang penting. Pada pengontrol tampilan peta, aplikasi Anda
harus mengadopsi protokol untuk pemroses ini:
GMSRoadSnappedLocationProviderListener
dan
GMSNavigatorListener.
Daftar ini menampilkan metode pemroses yang tersedia untuk peristiwa navigasi:
GMSNavigatorListener.didArriveAtWaypoint, dipicu saat tujuan tercapai.GMSNavigatorListener.navigatorDidChangeRoute, dipicu saat rute berubah.GMSNavigatorListener.didUpdateRemainingTime, dipanggil berulang kali saat waktu menempuh tujuan berikutnya berubah, saat panduan aktif.GMSNavigatorListener.didUpdateRemainingDistance, dipanggil berulang kali saat jarak ke tujuan berikutnya berubah, saat panduan aktif.GMSNavigatorListener.didUpdateDelayCategory, dipanggil saat kategori penundaan ke tujuan berikutnya berubah, saat panduan aktif.GMSNavigatorListener.didChangeSuggestedLightingMode, dipicu saat perkiraan kondisi pencahayaan diperbarui. Misalnya, saat malam tiba di lokasi pengguna saat ini, pencahayaan akan berubah.GMSNavigatorListener.didUpdateSpeedingPercentage, dipicu saat pengemudi melebihi batas kecepatan.GMSRoadSnappedLocationProviderListener.didUpdateLocation, dipanggil berulang kali saat lokasi pengguna berubah.
Melihat kode
Mendeklarasikan kesesuaian dengan protokol yang diperlukan
Sebelum menerapkan metode navigasi, pengontrol tampilan harus mengadopsi protokol:
Swift
class ViewController:
UIViewController,
GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener
{
}
Objective-C
@interface ViewController () <GMSNavigatorListener, GMSRoadSnappedLocationProviderListener>
@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 progres pengguna di peta.
Instance location mengekspos properti berikut:
| Properti lokasi | Deskripsi |
|---|---|
| altitude | Ketinggian saat ini. |
| coordinate.latitude | Koordinat lintang saat ini yang disesuaikan dengan jalan. |
| coordinate.longitude | Koordinat bujur saat ini yang disesuaikan dengan jalan. |
| course | Arah saat ini dalam derajat. |
| speed | 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 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, tetapkan
allowsBackgroundLocationUpdates ke true:
Swift
mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true
Objective-C
_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;
Mendeteksi peristiwa kedatangan
Aplikasi Anda menggunakan peristiwa didArriveAtWaypoint untuk mendeteksi kapan tujuan telah
tercapai. Anda dapat melanjutkan panduan dan melanjutkan ke titik jalan berikutnya dengan
memanggil continueToNextDestinationWithCompletion(), lalu mengaktifkan kembali
panduan. Aplikasi Anda harus mengaktifkan kembali panduan setelah memanggil
continueToNextDestinationWithCompletion().
Setelah aplikasi memanggil continueToNextDestinationWithCompletion, navigator tidak lagi memiliki data tentang tujuan sebelumnya. Jika ingin menganalisis
informasi tentang segmen rute, Anda harus mengambilnya dari navigator sebelum
memanggil continueToNextDestinationWithCompletion().
Contoh kode berikut menunjukkan metode untuk menangani peristiwa didArriveAtWaypoint:
Swift
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint: GMSNavigationWaypoint) {
print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestinationWithCompletion { _, _ in }
mapView.navigator?.isGuidanceActive = true
}
Objective-C
- (void)navigator:(GMSNavigator *)navigator didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint {
NSLog(@"You have arrived at: %@", waypoint.title);
[_mapView.navigator continueToNextDestinationWithCompletion:^(GMSNavigationWaypoint *waypoint,
GMSRouteStatus status){
}];
_mapView.navigator.guidanceActive = YES;
}
Menerima info terbaru tentang 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 pembaruan waktu ke tujuan secara berkelanjutan, buat metode untuk menangani peristiwa didUpdateRemainingTime. Parameter time memberikan perkiraan 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. 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 info terbaru tentang jarak ke tujuan
Untuk menerima pembaruan jarak ke tujuan secara berkelanjutan, buat metode untuk menangani
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 menetapkan perubahan minimum dalam perkiraan jarak ke tujuan berikutnya, tetapkan
properti distanceUpdateThreshold di 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 info lalu lintas
Untuk menerima pembaruan berkelanjutan tentang alur 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 saat ini. Jika data lalu lintas tidak tersedia,
GMSNavigationDelayCategory akan menampilkan 0. Angka 1-3 menunjukkan peningkatan
aliran dari ringan hingga 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 mengekspos tingkat keterlambatan berikut:
| Kategori penundaan | Deskripsi |
|---|---|
| GMSNavigationDelayCategoryNoData | 0 - Tidak tersedia, tidak ada data untuk lalu lintas atau : |
| rute. | |
| GMSNavigationDelayCategoryHeavy | 1 - Berat. |
| GMSNavigationDelayCategoryMedium | 2 - Sedang. |
| GMSNavigationDelayCategoryLight | 3 - Ringan. |
Menerima pembaruan tentang pelanggaran kecepatan
Untuk menerima pembaruan 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
GMSNavigator
menghitung mode pencahayaan yang disarankan berdasarkan waktu dan lokasi perangkat, serta memanggil metode pemroses didChangeSuggestedLightingMode hanya saat mode yang disarankan berubah (seperti saat matahari terbit atau terbenam). Untuk memastikan peta dimulai dengan mode pencahayaan yang sesuai saat
pengguna meluncurkan aplikasi Anda, tetapkan
mapView.lightingMode
ke
suggestedLightingMode navigator
selama inisialisasi, dan terapkan
didChangeSuggestedLightingMode
untuk menangani perubahan berikutnya.
Contoh berikut menunjukkan cara menyetel mode pencahayaan awal dan memproses perubahan mode pencahayaan yang disarankan:
Swift
// Set the initial lighting mode on launch or setup.
mapView.lightingMode = mapView.navigator?.suggestedLightingMode ?? .normal
// 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
// Set the initial lighting mode on launch or setup.
_mapView.lightingMode = _mapView.navigator.suggestedLightingMode;
// 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;
}
Untuk mengetahui informasi selengkapnya tentang konfigurasi mode pencahayaan otomatis dan manual, lihat Mengonfigurasi mode normal dan pencahayaan rendah.