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:
GMSNavigatorListener.didArriveAtWaypoint
, déclenché lorsqu'une destination est atteinte.GMSNavigatorListener.navigatorDidChangeRoute
, déclenché lorsque la route change.GMSNavigatorListener.didUpdateRemainingTime
, appelé plusieurs fois lorsque le temps de trajet vers la destination suivante change, alors que le guidage est actif.GMSNavigatorListener.didUpdateRemainingDistance
, est appelé à plusieurs reprises lorsque la distance jusqu'à la prochaine destination change, alors que le guidage est actif.GMSNavigatorListener.didUpdateDelayCategory
, appelé lorsque la catégorie de retard à la destination suivante change, tandis que le guidage est actif.GMSNavigatorListener.didChangeSuggestedLightingMode
, déclenchée lorsque les conditions d'éclairage estimées sont mises à jour. Exemple : lorsque la nuit tombe à l'emplacement actuel de l'utilisateur, l'éclairage change.GMSNavigatorListener.didUpdateSpeedingPercentage
, déclenchée lorsque le conducteur dépasse la limitation de vitesse.GMSRoadSnappedLocationProviderListener.didUpdateLocation
, appelé plusieurs fois à mesure que l'emplacement de l'utilisateur change.
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; }