Optimisez vos points de cheminement

L'optimisation des points de cheminement est une fonctionnalité de routage à privilégier qui étend ComputeRoutes. Elle optimise l'ordre des points de cheminement intermédiaires sur 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:

  • Voiture
  • Deux-roues motorisés
  • Vélo
  • Marche

Pourquoi utiliser l'optimisation des points de cheminement ?

Lorsque vous créez une application qui guide les utilisateurs à travers plusieurs points de cheminement vers une destination, il est important qu'ils les traversent dans l'ordre optimal. Ainsi, le voyageur arrive à chaque point de cheminement dans les plus brefs délais.

Comment ça marche ?

Par défaut, ComputeRoutes calcule un itinéraire passant par ses points de cheminement, dans l'ordre dans lequel ils ont été initialement fournis. Vous pouvez faire en sorte que ComputeRoutes optimise l'itinéraire en réorganisant les points de cheminement intermédiaires dans un ordre plus efficace. Si vous définissez le champ optimizeWaypointOrder dans le corps de la requête sur true, vous obtiendrez un itinéraire avec des points de cheminement optimisés.

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 virages.

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 sur 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 des routes 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 pouvez trouver les index de points de cheminement intermédiaires réorganisés dans les champs optimizedIntermediateWaypointIndex de l'objet "routes" du corps de la réponse. La polyligne encodée est identique à celle de l'API Directions et de 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, notez que l'optimisation des points de cheminement inverse leur ordre d'origine.

Le traitement d'une requête avec des points de cheminement optimisés est plus long qu'une simple requête de routage. Par conséquent, nous vous recommandons de définir un délai avant expiration plus élevé pour l'appel de méthode en définissant une valeur d'au moins dix secondes pour l'en-tête de requête X-Server-Timeout. Si vous continuez à recevoir des erreurs de délai avant 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 sur votre route:

    • Jusqu'à 98 points de cheminement, uniquement en utilisant 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 escale. 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 au moins 25 points de cheminement intermédiaires, elle doit également respecter les conditions suivantes:

    • La distance en ligne droite cumulée 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.