Écouter les événements de navigation

Utilisez ce guide pour permettre à votre application d'écouter divers événements et d'y répondre qui changent à mesure qu'un utilisateur parcourt un itinéraire. Ce guide ne couvre pas définir un itinéraire, en répondant uniquement aux événements le long d’un itinéraire.

Présentation

Le SDK Navigation pour iOS fournit des écouteurs associé à la position de l'utilisateur et aux conditions sur l'itinéraire. les données de temps et de distance importantes. Dans le contrôleur de vue de la carte, votre application doit adopter les protocoles pour ces écouteurs: GMSRoadSnappedLocationProviderListener et GMSNavigatorListener

Cette liste présente les méthodes d'écouteur disponibles pour les événements de navigation:

Voir le code

Déclaration de conformité aux protocoles requis

Avant d'implémenter les méthodes de navigation, le contrôleur de vue doit adopter la protocoles:

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

Après avoir adopté les protocoles de navigation, définissez les écouteurs sur la vue contrôleur. Par exemple, vous pouvez ajouter le code suivant à viewDidLoad() .

Swift

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

Objective-C

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

Réception ou arrêt des notifications de position

Les mises à jour de la position sont nécessaires pour afficher la progression de l'utilisateur sur la carte.

L'instance location expose les propriétés suivantes:

Propriété de l'emplacement Description
altitude Altitude actuelle.
coordinate.latitude Coordonnée de latitude actuelle avec écartement de la route.
coordinate.longitude Coordonnée de longitude actuelle avec écartement de la route.
cours Orientation actuelle en degrés.
speed Vitesse actuelle.
timestamp Date et heure de la mesure actuelle.

Pour recevoir des mises à jour en continu de votre position, appelez mapView.roadSnappedLocationProvider.startUpdatingLocation , et utilisez les GMSRoadSnappedLocationProviderListener pour gérer didUpdateLocation .

L'exemple suivant vous montre comment appeler startUpdatingLocation :

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatingLocation];

Le code suivant crée un GMSRoadSnappedLocationProviderListener qui gère l'événement 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); }

Pour recevoir des notifications de position lorsque l'application est exécutée en arrière-plan, définissez allowsBackgroundLocationUpdates sur "true" :

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

Détecter les événements d'arrivée

Votre application utilise l'événement didArriveAtWaypoint pour détecter si une destination a a été atteinte. Vous pouvez reprendre le guidage et passer au point de cheminement suivant en en appelant continueToNextDestination(), puis en réactivant le guidage. Votre application devez réactiver le guidage après avoir appelé continueToNextDestination().

Une fois que l'application a appelé continueToNextDestination, le navigateur n'a plus des données sur la destination précédente. Si vous souhaitez analyser des informations la section d'itinéraire, vous devez la récupérer dans le navigateur avant d'appeler continueToNextDestination()

L'exemple de code suivant montre une méthode permettant de gérer didArriveAtWaypoint événement:

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; }

Recevoir des notifications de modification de l'itinéraire

Pour recevoir une notification chaque fois que la route est modifiée, créez une méthode pour gérer l'événement navigatorDidChangeRoute. Vous pouvez accéder au nouvel itinéraire en utilisant les propriétés routeLegs et currentRouteLeg de GMSNavigator.

Swift

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

Objective-C

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

Recevoir des informations sur le délai avant destination

Pour recevoir en continu des mises à jour du délai avant destination, créez une méthode permettant de gérer Événement didUpdateRemainingTime. Le paramètre time fournit l'estimation temps, en secondes, jusqu'à ce que la prochaine destination soit atteinte.

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); }

Pour définir la variation minimale de l'heure d'arrivée prévue pour la prochaine destination, définissez la timeUpdateThreshold sur GMSNavigator. La valeur est spécifiée en secondes. Si cette propriété n'est pas définie, les services utilisent la valeur par défaut 1 seconde.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Recevoir des informations sur la distance jusqu'à la destination

Pour recevoir en continu des informations sur la distance jusqu'à la destination, créez une méthode pour gérer l'événement didUpdateRemainingDistance. Le paramètre distance fournit distance estimée, en mètres, jusqu'à la prochaine destination.

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]); }

Pour définir la variation minimale de la distance estimée jusqu'à la prochaine destination, définissez la Propriété distanceUpdateThreshold sur GMSNavigator (la valeur est spécifiée dans mètres). Si cette propriété n'est pas définie, les services utilisent la valeur par défaut 1 compteur.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Recevoir des informations sur le trafic

Pour recevoir des mises à jour continues du flux de trafic pour l'itinéraire restant, Créez une méthode pour gérer l'événement didUpdateDelayCategory. Un appel à delayCategoryToNextDestination renvoie GMSNavigationDelayCategory, qui fournit une valeur comprise entre 0 et 3. Les modifications apportées à la catégorie sont basées sur la la position de l'utilisateur de l'application. Si les données de trafic ne sont pas disponibles, GMSNavigationDelayCategory renvoie 0. Les nombres, 1 à 3, indiquent une augmentation s'écoule de la légère à l'abondante.

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); }

La propriété GMSNavigationDelayCategory expose les niveaux de délai suivants:

Catégorie de retard Description
GMSNavigationDelayCategoryNoData 0 – Indisponible, aucune donnée sur le trafic ou :
la route.
GMSNavigationDelayCategoryHeavy 1 - Abondante.
GMSNavigationDelayCategoryMedium 2 - Moyen.
GMSNavigationDelayCategoryLight 3 – Léger.

Recevoir des notifications sur l'excès de vitesse

Pour recevoir des notifications lorsqu'un conducteur dépasse la limitation de vitesse, créez une méthode pour gérer l'événement 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); }

Modifier le mode d'éclairage suggéré

Pour recevoir des informations sur les changements estimés de luminosité, créez une méthode pour gérer l'événement 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; }