Vous pouvez parfois vouloir planifier l'itinéraire que votre application fournit aux utilisateurs. L'utilisation d'un jeton de route de l'API Routes, de l'API Routes Preferred ou de l'API Route Optimization peut vous aider à spécifier deux éléments pour l'itinéraire planifié :
Une polyligne pour l'itinéraire
Vos objectifs d'itinéraire
Voici quelques exemples d'objectifs de routage :
Réduire le délai de livraison : une entreprise de livraison de repas peut vouloir réduire le temps nécessaire à la livraison des repas.
Réduire le temps de trajet ou la consommation de carburant : une entreprise de logistique peut vouloir améliorer l'efficacité de ses conducteurs et réduire ses coûts de carburant.
Réduire le temps de trajet : une opération de répartition de service peut vouloir réduire le temps nécessaire pour que les opérateurs accèdent à une demande de tâche.
Réduire les coûts et améliorer la sécurité : une entreprise de covoiturage peut vouloir trouver un itinéraire moins coûteux pour les passagers et éviter certaines zones pour des raisons de sécurité.
Pour en savoir plus sur la planification d'un itinéraire à l'aide d'un jeton de route, consultez Obtenir un jeton de route dans l'API Routes et Transition des polylignes et des jetons de route dans l'API Route Optimization.
Pourquoi utiliser un jeton de route pour les objectifs de route ?
Avec un jeton de route de l'API Routes, de l'API Routes Preferred ou de l'API Route Optimization, vous contrôlez mieux l'itinéraire fourni :
Planifiez un itinéraire à l'avance pour que le SDK Navigation l'utilise.
Choisissez le meilleur itinéraire à utiliser pour le SDK Navigation. Si vous demandez des jetons de route lors de la génération de routes dans l'API Routes, vous obtenez un jeton de route pour chaque route générée. Vous pouvez ensuite choisir le jeton de l'itinéraire que vous souhaitez utiliser lorsque vous le transmettez au SDK Navigation.
Estimez le prix à l'avance, y compris les estimations de l'heure d'arrivée prévue et de la distance. Bien que le coût et la durée réels puissent varier, cette estimation réduit l'écart entre le coût prévu et le coût réel de l'itinéraire.
Spécifiez des objectifs d'itinéraire plus avancés, tels que l'itinéraire écologique ou l'itinéraire le plus court.
Fonctionnement des jetons de route
Vous pouvez utiliser l'API Routes, l'API Routes Preferred ou l'API Route Optimization pour planifier un itinéraire à l'aide d'objectifs d'itinéraire. Vous pouvez transmettre un jeton de route renvoyé par l'une de ces API au SDK Navigation pour guider l'itinéraire de votre véhicule.
Voici ce qui se passe lorsque vous demandez et utilisez un jeton d'itinéraire :
L'API Routes, l'API Routes Preferred ou l'API Route Optimization renvoie un jeton de route chiffré qui inclut la polyligne de l'itinéraire et les objectifs de l'itinéraire.
Vous transmettez le jeton de route au SDK Navigation.
Le SDK Navigation démarre la navigation sur l'itinéraire prévu, même si un itinéraire plus rapide est disponible.
Pendant le trajet, si les conditions de circulation ou de route changent, ou si le véhicule quitte l'itinéraire prévu, le SDK Navigation calcule un nouvel itinéraire qui respecte les objectifs et les options de routage définis dans votre jeton d'itinéraire.
Ce processus permet de maximiser la proximité entre l'itinéraire réel et l'itinéraire planifié.
Pourquoi un itinéraire planifié peut ne pas être suivi exactement
La navigation commence sur l'itinéraire planifié, mais l'itinéraire réel peut en différer dans les situations suivantes :
- Le véhicule démarre loin du point de départ prévu.
- Les conditions de circulation ou de l'état de la route changent pendant le trajet.
- Le véhicule quitte l'itinéraire prévu.
Ces différences peuvent affecter la distance, l'heure d'arrivée prévue et d'autres caractéristiques importantes du trajet que vous avez planifié.
Planifier un itinéraire à l'aide d'un jeton d'itinéraire
Vous pouvez planifier un itinéraire en créant un jeton d'itinéraire, puis en le transmettant au SDK Navigation, comme décrit dans les étapes suivantes :
Étape 1 : Créez un jeton de route à l'aide de l'API Routes, de l'API Routes Preferred ou de l'API Route Optimization
Demandez un jeton d'itinéraire à l'aide de l'une des méthodes suivantes :
API Routes :
computeRoutes. Pour en savoir plus sur la demande d'un jeton d'itinéraire dans l'API Routes, consultez Calculer un itinéraire et Obtenir un jeton d'itinéraire.API Routes Preferred :
computeCustomRoutes. Pour en savoir plus sur la demande d'un jeton de route dans l'API Routes Preferred, consultez Planifier un itinéraire.API Route Optimization :
optimizeToursoubatchOptimizeTours. Pour en savoir plus sur la demande d'un jeton d'itinéraire dans l'API Route Optimization, consultez Polylignes de transition et jetons d'itinéraire.
Configurez votre requête API Routes ou API Routes Preferred pour répondre aux exigences d'utilisation d'un jeton de route :
- Définissez
travelModesurDRIVEouTWO_WHEELER. - Définissez
routingPreferencesurTRAFFIC_AWAREouTRAFFIC_AWARE_OPTIMAL. - N'utilisez pas de points de cheminement
Via.
- Définissez
Étape 2 : Transmettez le jeton d'itinéraire au SDK Navigation
Stocker le jeton de route : dans le SDK Navigation, configurez une chaîne pour stocker le jeton de route. Exemple :
let routeToken = "route token returned by Routes API"Exemple de jeton d'itinéraire renvoyé :
{ // Other fields "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g", }Transmettez le jeton d'itinéraire au SDK Navigation à l'aide de la méthode
setDestinationsWithToken:completionHandler:demapView.navigator. Le SDK Navigation obtient les destinations et les options de routage à partir du jeton de route. Vous n'avez donc pas besoin de transmettre de points de cheminement.Le mode de transport défini dans votre application, par exemple
mapView.travelMode, doit correspondre à l'une des valeurs suivantes :.driving(GMSNavigationTravelModeDriving) : en voiture. Il s'agit de la valeur par défaut. La plupart des applications n'ont donc pas besoin de la modifier..twoWheeler(GMSNavigationTravelModeTwoWheeler) : deux-roues.
Tout autre mode de transport entraîne l'échec de la requête avec
.travelModeUnsupported(GMSRouteStatusTravelModeUnsupported). Avec l'une ou l'autre des valeurs acceptées, l'itinéraire utilise le mode de transport de votre jeton d'itinéraire. Par exemple, si votre application utilise la conduite et que votre jeton de route est destiné à un itinéraire en deux-roues, le SDK Navigation fournit un itinéraire en deux-roues. Pour confirmer le mode de transport utilisé par l'itinéraire, vérifiezresolvedParameters.travelMode. Pour en savoir plus, consultez Options de routage résolues.Vérifiez l'état de l'itinéraire dans votre gestionnaire d'achèvement. Lorsque le SDK Navigation a terminé de calculer l'itinéraire, il transmet un
GMSNavigationRouteDescriptionà votre gestionnaire d'achèvement. S'il trouve un itinéraire entre la position du véhicule et les destinations de votre jeton d'itinéraire, lerouteStatusde la description de l'itinéraire est.OK(GMSRouteStatusOK), et vous pouvez démarrer le guidage. Sinon, votre gestionnaire d'achèvement reçoit également unNSErrorqui décrit l'échec. Exemple :mapView.navigator?.setDestinationsWithToken(routeToken) { [weak self] routeDescription, error in if routeDescription?.routeStatus == .OK { self?.mapView.navigator?.isGuidanceActive = true } }
Vérifier si le SDK Navigation a appliqué votre jeton d'itinéraire
L'état d'itinéraire .OK signifie que le SDK Navigation a trouvé un itinéraire, mais pas nécessairement celui que vous aviez prévu. Pour vérifier si l'itinéraire correspond à celui que vous avez planifié, procédez comme suit dans votre gestionnaire d'achèvement :
Vérifiez que la valeur de
routeStatusdans la description de la route est.OK. Le SDK Navigation ne fournit des détails sur le jeton d'itinéraire que lorsqu'il trouve un itinéraire. Pour en savoir plus, consultez l'étape 2.Obtenez l'objet
routeTokenExecutionDetailsde la description de l'itinéraire, qui est conforme au protocoleGMSNavigationRouteTokenExecutionDetails. Si le serveur ne fournit pas d'informations sur le jeton de route, cette propriété estnil.Vérifiez la propriété
tokenExecutionStatusdes détails de l'exécution. Si la valeur est.tokenSuccessfullyApplied, l'itinéraire correspond à celui que vous avez planifié. Tout autre état signifie que l'itinéraire peut différer de celui que vous avez planifié. Pour en savoir plus sur chaque état, consultez Valeurs d'état d'exécution des jetons.Facultatif : Si l'état est
.tokenSuccessfullyApplied, vérifiez la propriétéresolvedParametersdes mêmes détails d'exécution pour voir quelles options d'itinéraire l'itinéraire utilise, par exemple s'il évite les péages. Pour en savoir plus, consultez Options de routage résolues.
Valeurs d'état d'exécution du jeton
Si routeStatus est défini sur .OK, vous pouvez démarrer le guidage avec n'importe quel état d'exécution du jeton. L'état vous indique si l'itinéraire suit votre itinéraire prévu.
| État | Suit votre itinéraire planifié | Description |
|---|---|---|
.tokenSuccessfullyApplied |
Oui | Le SDK Navigation a appliqué votre jeton d'itinéraire. |
.tokenAppliedWithLocationMismatch |
Pas nécessairement | Le SDK Navigation n'a pas pu reconstruire l'itinéraire planifié, et l'appareil se trouvait à plus de 25 mètres du point de départ indiqué dans votre jeton d'itinéraire. L'itinéraire utilise toujours les destinations et les options de routage de votre jeton d'itinéraire. |
.tokenIgnoredOther |
Pas nécessairement | Le SDK Navigation n'a pas pu recréer l'itinéraire prévu pour une autre raison (par exemple, parce qu'une route de l'itinéraire prévu est fermée). L'itinéraire utilise toujours les destinations et les options de routage de votre jeton d'itinéraire. |
.noTokenProvided |
Non applicable | La requête d'itinéraire n'incluait pas de jeton d'itinéraire. |
.unknown |
Inconnu | L'état est inconnu. |
Si l'itinéraire ne suit pas nécessairement l'itinéraire planifié et que l'itinéraire exact est important (par exemple, parce que vous l'avez utilisé pour calculer un prix), consignez l'état ou demandez un nouveau jeton d'itinéraire à partir de la position actuelle du véhicule.
Options de routage résolues
resolvedParameters est un objet conforme au protocole GMSNavigationRouteTokenResolvedParameters, ou nil si les options de routage ne sont pas disponibles. Il possède les propriétés suivantes :
travelMode: mode de transport utilisé par l'itinéraire, par exemple.driving(GMSNavigationTravelModeDriving). Le SDK Navigation indique également.drivinglorsque l'itinéraire utilise un mode de transport sans valeur correspondante ou lorsque le mode de transport n'est pas disponible.avoidTolls: indique si l'itinéraire évite les péages.avoidHighways: indique si l'itinéraire évite les autoroutes.avoidFerries: indique si l'itinéraire évite les ferries.avoidTunnels: indique si l'itinéraire a été calculé pour éviter les tunnels dans la mesure du possible.avoidVignettes: pays dans lesquels l'itinéraire a été calculé pour éviter les vignettes de péage lorsque cela est possible, sous forme de codes de région CLDR Unicode à deux lettres, par exempleCHpour la Suisse.rerouteStrategy: stratégie utilisée par le backend de routage pour calculer de nouveaux itinéraires pendant le trajet. Les stratégies incluent.bestBasedOnTokenParameters(GMSNavigationRerouteStrategyBestBasedOnTokenParameters), qui utilise les paramètres de routage de votre jeton de route pour calculer de nouveaux itinéraires.
Si l'état d'exécution du jeton n'est pas .tokenSuccessfullyApplied, le SDK Navigation ne signale que travelMode, avoidTolls, avoidHighways et avoidFerries. Les autres propriétés ont leurs valeurs par défaut, même si vous avez demandé d'éviter les tunnels ou les vignettes de péage lorsque vous avez demandé le jeton de route : avoidTunnels est false (NO), avoidVignettes est vide et rerouteStrategy est .unknown (GMSNavigationRerouteStrategyUnknown).
Exemple
L'exemple de code suivant montre comment planifier un itinéraire à l'aide d'un jeton d'itinéraire, vérifier si le SDK Navigation a appliqué le jeton et démarrer le guidage.
Swift
let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinationsWithToken(routeToken) { [weak self] routeDescription, error in
// Check whether the Navigation SDK found a route.
guard routeDescription?.routeStatus == .OK else {
print("Route error: \(error?.localizedDescription ?? "unknown")")
return
}
// Check whether the Navigation SDK applied the route token.
if let executionDetails = routeDescription?.routeTokenExecutionDetails {
if executionDetails.tokenExecutionStatus != .tokenSuccessfullyApplied {
print("The route might differ from your planned route.")
}
} else {
print("Route token details aren't available.")
}
self?.mapView.navigator?.isGuidanceActive = true
}
Objective-C
NSString *routeToken = @"route token returned by Routes API";
[mapView.navigator setDestinationsWithToken:routeToken
completionHandler:^(id<GMSNavigationRouteDescription> _Nullable routeDescription,
NSError *_Nullable error) {
// Check whether the Navigation SDK found a route.
if (routeDescription.routeStatus != GMSRouteStatusOK) {
NSLog(@"Route error: %@", error.localizedDescription);
return;
}
// Check whether the Navigation SDK applied the route token.
id<GMSNavigationRouteTokenExecutionDetails> executionDetails =
routeDescription.routeTokenExecutionDetails;
if (executionDetails == nil) {
NSLog(@"Route token details aren't available.");
} else if (executionDetails.tokenExecutionStatus !=
GMSNavigationRouteTokenExecutionStatusTokenSuccessfullyApplied) {
NSLog(@"The route might differ from your planned route.");
}
mapView.navigator.guidanceActive = YES;
}];
Scénarios avec plusieurs arrêts
Vous pouvez configurer jusqu'à 25 points de cheminement.
Le SDK Navigation ne passe pas automatiquement à la destination suivante. Lorsque le véhicule arrive à un point de cheminement, appelez continueToNextDestinationWithCompletion: pour démarrer l'étape suivante du trajet. Cela s'applique également aux jetons de route comportant des points de cheminement intermédiaires. Lorsque vous passez à la destination suivante, le SDK Navigation continue de suivre l'itinéraire de votre jeton d'itinéraire au lieu de planifier un nouvel itinéraire.
Interaction entre les jetons de route et le SDK Navigation
Voici comment le SDK Navigation gère votre itinéraire planifié :
Remplace toutes les destinations précédemment définies.
Utilise la position de départ du véhicule.
Ajuste l'itinéraire en fonction des conditions de circulation et de l'état de la route. Consultez Pourquoi un itinéraire planifié peut ne pas être suivi exactement.
Utilise les options de routage définies dans votre jeton de route au lieu des paramètres suivants dans votre application, y compris lorsqu'il calcule un nouvel itinéraire pendant le trajet :
avoidsHighwaysavoidsTollsavoidsFerrieslicensePlateRestriction- Le mode de transport défini dans votre application
suit ces paramètres lorsqu'il calcule ou ajuste l'itinéraire :
- Objectifs d'itinéraire à partir de votre jeton d'itinéraire, tels que l'itinéraire écologique ou l'itinéraire le plus court. Si le SDK Navigation doit ajuster l'itinéraire, il utilise les objectifs d'itinéraire que vous avez spécifiés lorsque vous avez demandé le jeton d'itinéraire.
- Options liées aux points de cheminement de votre jeton d'itinéraire, telles que la préférence de côté de la route.