Optimisez vos points de cheminement

L'optimisation des points de cheminement est une fonctionnalité préférée de Routes qui étend ComputeRoutes. Elle optimise l'ordre des points de cheminement intermédiaires dans l'itinéraire d'un voyageur, en veillant à ce qu'il emprunte l'itinéraire le plus efficace possible. L'implémentation ComputeRoutes de l'optimisation des points de cheminement est compatible avec les modes de transport suivants :

  • En voiture
  • Deux-roues motorisé
  • Vélo
  • À pied

Pourquoi utiliser l'optimisation des points de cheminement ?

Lorsque vous créez une application qui guide les utilisateurs vers une destination en passant par plusieurs points de cheminement, il est important que le voyageur les traverse dans l'ordre optimal. Cela garantit que le voyageur arrive à chaque point de cheminement dans les plus brefs délais.

Fonctionnement

Par défaut, ComputeRoutes calcule un itinéraire passant par ses points de cheminement, dans l'ordre dans lequel ils ont été fournis à l'origine. Vous pouvez demander à ComputeRoutes d'optimiser l'itinéraire en réorganisant les points de cheminement intermédiaires dans un ordre plus efficace. Vous recevrez un itinéraire avec des points de cheminement optimisés si vous définissez le champ optimizeWaypointOrder du corps de la requête sur true.

Remarque : Le calcul de l'optimisation des points de cheminement est principalement basé sur le temps de trajet, mais la fonctionnalité prend également en compte d’autres facteurs, tels que la distance et le nombre de changements de direction.

Obtenir des points de cheminement réorganisés

Pour obtenir un itinéraire avec des points de cheminement réorganisés, définissez le champ booléen optimizeWaypointOrder sur true dans le corps de votre requête à ComputeRoutes. Incluez également le champ optimizedIntermediateWaypointIndex dans le masque de champ. Le corps de la réponse contient l'ordre optimisé des points de cheminement dans les champs optimizedIntermediateWaypointIndex.

Remarque : Le champ optimizedIntermediateWaypointIndex renvoie des valeurs basées sur zéro.

Exemple de requête

L'exemple de requête suivant fournit un itinéraire à proximité du campus de l'université de Stanford. Les points de cheminement de l'itinéraire ont été fournis de manière séquentielle dans la requête. La requête contient un point de départ et une destination, avec deux points de cheminement intermédiaires.

POST /v1alpha:computeRoutes
Host: routespreferred.googleapis.com
Content-Type: application/json
X-Server-Timeout: 10
X-Goog-Api-Key: YOUR_API_KEY
X-Goog-FieldMask: routes.optimizedIntermediateWaypointIndex,routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline
{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.418956,
        "longitude": -122.160815
      }
    }
  },
  "intermediates": [
    {
      "location":{
        "latLng":{
          "latitude": 37.4176423,
          "longitude":-122.1102246
        }
      }
    },
    {
      "location":{
        "latLng":{
          "latitude": 37.407689,
          "longitude": -122.1360597
        }
      }
    }
  ],
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.4032137,
        "longitude": -122.0349119
      }
    }
  },
  "travelMode": "DRIVE",
  "optimizeWaypointOrder": true,
  "routingPreference": "TRAFFIC_AWARE"}

Exemple de réponse

Vous trouverez les index des points de cheminement intermédiaires réorganisés dans les champs optimizedIntermediateWaypointIndex de l'objet routes dans le corps de la réponse. La polyligne encodée est la même que dans l'API Directions et ComputeRoutes.

routes {
  distance_meters: 17647
  duration {
    seconds: 1866
  }
  polyline {
    encoded_polyline: "wkkcFvorhVU{@Ec@C}CG}@Mm@[}@i@y@[[g@_@Tk@BSjCgGfF|D\\Pv@Lj@@XaCTeC\\aCTs@`ByD`@k@h@e@x@Yh@GtADhBF|@G`AWpAs@lAsAdA{A`BmDr@cBmUqQoS}OyGmFiBsAgEwD}CaCU_@Og@@e@Hy@nGkO~@sBr@cBlDqIlByEp@}AjIfGnBbBHLLd@^p@~ErDfNrKrA~@DIhEeBTQ~AqDlE{KjBgE|FnEh@aAi@`A}FoE~AmD`A}BcAm@mHwFwD}CkLwIsDqCgF_EG[GKnCsDrA_BrC_CnCoBpEkD`EyClCsBcBeBIAkGkH]k@eJmKQKsAuA_@g@wCoDGQmEmFmIqROKaDuHvBkBxAgANCRH^f@v@dBHDD?`AUiBqEhBpEaATMCQYm@wAY]SIOByAfAwBjB_ByDaAwBiCeIA[c@aBqEuNOm@IQbA{c@p@aZFmCTuBLg@Tc@BUAKxOeV~Vy_@nBoDv@_BvAcDzA_EdG{RdC{HtIsY|B{Hx@mDbAuFdBsMbKsv@TaBf@}AdF{Sn@_DJq@Lo@aE`@]GUQmAmAQk@@g@RK`Ce@d@UDEPc@f@cCrAyGJs@X{AbIem@bA{JD_AIaAMg@o@{A_Ad@y@NaCLCsCK_FGI"
  }
  optimizedIntermediateWaypointIndex: 1
  optimizedIntermediateWaypointIndex: 0
}

Dans cet exemple, l'optimisation des points de cheminement inverse leur ordre d'origine.

Le traitement d'une requête avec des points de cheminement optimisés prend plus de temps que celui d'une simple requête d'itinéraire. Nous vous recommandons donc de définir un délai d'expiration plus long pour l'appel de méthode en définissant une valeur d'au moins 10 secondes pour l'en-tête de requête X-Server-Timeout. Si vous continuez à recevoir des erreurs de délai d'expiration, vous pouvez ajouter une seconde, puis réessayer.

Limites d'utilisation

Pour utiliser l'optimisation des points de cheminement, vous devez respecter les limites et conditions d'utilisation suivantes :

  • Vous pouvez spécifier jusqu'à la limite d'utilisation pour les points de cheminement intermédiaires de votre itinéraire :

    • Jusqu'à 98 points de cheminement en utilisant uniquement les coordonnées de latitude et de longitude.
    • Jusqu'à 25 points de cheminement si vous spécifiez des points de cheminement à l'aide d'ID de lieu.
  • Tous vos points de cheminement doivent être de type stopover. Aucun de vos points de cheminement ne peut être de type via.

  • Vous devez ajouter routes.optimizedIntermediateWaypointIndex au masque de champ.

  • Si votre requête comporte 25 points de cheminement intermédiaires ou plus, elle doit également respecter les conditions suivantes :

    • La distance cumulée en ligne droite entre tous les points de cheminement doit être inférieure à 1 000 km. Cette distance inclut à la fois le point de départ et la destination.

    • Le mode de transport doit être DRIVE.