Utilisez ce guide pour permettre à votre application d'écouter et de répondre à divers événements qui changent à mesure que l'utilisateur emprunte un itinéraire. Ce guide ne couvre pas la définition d'une route, mais uniquement les réponses aux événements qui le suivent.
Présentation
Le SDK Navigation pour iOS fournit des écouteurs associés à la position de l'utilisateur et aux conditions de l'itinéraire, ainsi que des données importantes sur la durée et la distance. Sur 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:
GMSNavigatorListener.didArriveAtWaypoint
: se déclenche lorsqu'une destination est atteinte.GMSNavigatorListener.navigatorDidChangeRoute
, qui se déclenche lorsque la route change.GMSNavigatorListener.didUpdateRemainingTime
, appelé à plusieurs reprises lorsque le temps jusqu'à la destination suivante change, tant que le guidage est actif.GMSNavigatorListener.didUpdateRemainingDistance
, appelé de manière répétée lorsque la distance jusqu'à la destination suivante change, lorsque le guidage est actif.GMSNavigatorListener.didUpdateDelayCategory
, appelé lorsque la catégorie de retard vers la destination suivante change, alors que le guidage est actif.GMSNavigatorListener.didChangeSuggestedLightingMode
, qui se déclenche lorsque les conditions d'éclairage estimées sont mises à jour. Par exemple, lorsque la nuit tombe à l'endroit où se trouve l'utilisateur, l'éclairage change.GMSNavigatorListener.didUpdateSpeedingPercentage
, qui se déclenche lorsque le conducteur dépasse la limite de vitesse.GMSRoadSnappedLocationProviderListener.didUpdateLocation
, appelé de manière répétée lorsque la position de l'utilisateur change.
Voir le code
Déclarer la conformité avec les protocoles requis
Avant d'implémenter les méthodes de navigation, le contrôleur de vue doit adopter les protocoles suivants:
Swift
class ViewController: UIViewController, GMSNavigatorListener, GMSRoadSnappedLocationProviderListener {
Objective-C
@interface ViewController () <gmsnavigatorlistener, gmsroadsnappedlocationproviderlistener=""></gmsnavigatorlistener,>
@end
Après avoir adopté les protocoles de navigation, définissez les écouteurs sur le contrôleur de vue. Par exemple, vous pouvez ajouter le code suivant à la méthode viewDidLoad()
.
Swift
mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)
Objective-C
[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider addListener:self];
Recevoir ou arrêter 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 lieu | Description |
---|---|
altitude | Altitude actuelle. |
coordinate.latitude | Coordonnée de latitude actuelle associée à la route. |
coordinate.longitude | Coordonnée de longitude actuelle associée à la route. |
cours | Orientation actuelle en degrés. |
speed | Vitesse actuelle. |
timestamp | Date/heure de la lecture en cours. |
Pour recevoir des mises à jour de position en continu, appelez mapView.roadSnappedLocationProvider.startUpdatingLocation
et utilisez GMSRoadSnappedLocationProviderListener
pour gérer l'événement didUpdateLocation
.
L'exemple suivant vous montre comment appeler startUpdatingLocation
:
Swift
mapView.roadSnappedLocationProvider.startUpdatingLocation()
Objective-C
[_mapView.roadSnappedLocationProvider startUpdatedLocation];
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 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 quand une destination a été atteinte. Vous pouvez reprendre le guidage et passer au point de cheminement suivant en appelant continueToNextDestination()
, puis en le réactivant. Votre application doit réactiver le guidage après avoir appelé continueToNextDestination()
.
Une fois que l'application a appelé continueToNextDestination
, le navigateur ne dispose plus de données sur la destination précédente. Si vous souhaitez analyser des informations sur une section d'itinéraire, vous devez les récupérer à partir du navigateur avant d'appeler continueToNextDestination()
.
L'exemple de code suivant montre une méthode permettant de gérer l'événement didArriveAtWaypoint
:
Swift
func navigateurator(_ navigateurator: GMSNavigator, didArriveAt waypoint: GMSNavigationWaypoint) { print("Vous êtes arrivé à: (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 informations sur les modifications des itinéraires
Pour recevoir une notification chaque fois que la route est modifiée, créez une méthode permettant de gérer l'événement navigatorDidChangeRoute
. Vous pouvez accéder à la nouvelle route en utilisant les propriétés routeLegs
et currentRouteLeg
de GMSNavigator
.
Swift
func navigateuratorDidChangeRoute(_ navigateurator: 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 des mises à jour continues du délai avant destination, créez une méthode permettant de gérer l'événement didUpdateRemainingTime
. Le paramètre time
fournit le temps estimé, en secondes, avant que la destination suivante soit atteinte.
Swift
func navigateurator(_ navigateurator: GMSNavigator, doesUpdateRrestTime time: TimeInterval) { print("Time to next destination: (time)") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator didUpdate supportsTime:(NSTimeInterval)time { NSLog(@"Time to next destination: %f", time); }
Pour définir la variation minimale du délai estimé pour la prochaine destination, définissez la propriété timeUpdateThreshold
sur GMSNavigator
. La valeur est spécifiée en secondes. Si cette propriété n'est pas définie, les services utilisent une valeur par défaut d'une seconde.
Swift
navigateurator?.timeUpdateThreshold = 10
Objective-C
navigateurator.timeUpdateThreshold = 10;
Recevoir des informations sur la distance jusqu'à la destination
Pour recevoir des mises à jour de la distance continue jusqu'à la destination, créez une méthode permettant de gérer l'événement didUpdateRemainingDistance
. Le paramètre distance
fournit la distance estimée, en mètres, jusqu'à la destination suivante.
Swift
func navigateurator(_ navigateurator: GMSNavigator, didUpdateAnyDistance distance: CLLocationDistance) { let miles = distance * 0.00062137 print("Distance to next destination: (miles) miles.") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator didUpdateAnyDistance:(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 destination suivante, définissez la propriété distanceUpdateThreshold
sur GMSNavigator
(la valeur est spécifiée en mètres). Si cette propriété n'est pas définie, les services utilisent une valeur par défaut d'un mètre.
Swift
navigateurator?.distanceUpdateThreshold = 100
Objective-C
navigateurator.distanceUpdateThreshold = 100;
Recevoir des informations sur le trafic
Pour recevoir des mises à jour continues du flux de trafic pour la route restante, créez une méthode permettant de gérer l'événement didUpdateDelayCategory
. Un appel à delayCategoryToNextDestination
renvoie GMSNavigationDelayCategory
, qui fournit une valeur comprise entre 0 et 3. Les mises à jour de la catégorie sont basées sur la position actuelle de l'utilisateur de l'application. Si les données de trafic ne sont pas disponibles, GMSNavigationDelayCategory
renvoie 0. Les nombres, de 1 à 3, indiquent un
flux croissant, de léger à lourd.
Swift
func navigateurator(_ navigateurator: 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 retard suivants:
Catégorie de délai | Description |
---|---|
GMSNavigationDelayCategoryNoData | 0 - Indisponible, aucune donnée pour le trafic ou : |
la route. | |
GMSNavigationDelayCategoryHeavy | 1 - Intense. |
GMSNavigationDelayCategoryMedium | 2 - Moyen. |
GMSNavigationDelayCategoryLight | 3 – Faible. |
Recevoir des informations sur les excès de vitesse
Pour recevoir des mises à jour lorsqu'un conducteur dépasse la limite de vitesse, créez une méthode permettant de gérer l'événement didUpdateSpeedingPercentage
.
Swift
// Écouteur pour gérer les événements d'excès de vitesse. func navigateurator( _ navigateurator: GMSNavigator, didUpdateSpeedingPercentagePercentageAboveLimit: CGFloat ) { print("Speed is (percentageAboveLimit) above the limit.") }
Objective-C
// Écouteur pour gérer les événements d'excès de vitesse. - (void)navigator:(GMSNavigator *)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit { NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit); }
Modification du mode d'éclairage suggéré
Pour recevoir des mises à jour concernant les changements d'éclairage estimés, créez une méthode permettant de gérer l'événement didChangeSuggestedLightingMode
.
Swift
// Définir un écouteur pour les suggestions de modifications du mode d'éclairage. func navigateurator(_ navigator: GMSNavigator, doesChangeSuggestedLightingMode lightsMode: GMSNavigationLightingMode) { print("Suggested encryption mode has changed: (String(dewriting: LightingMode))")
// Apportez la modification suggérée. mapView.lightingMode = lightsMode }
Objective-C
// Définir un écouteur pour les suggestions de modifications du mode d'éclairage -(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode: (GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested analysis mode has changed: %ld", (long)lightingMode);
// Effectuer la modification suggérée. _mapView.lightingMode = lightsMode; }