Optimisez vos points de cheminement

L'optimisation des points de cheminement est une fonctionnalité Routes Preferred qui étend ComputeRoutes. Elle optimise l'ordre des points de cheminement intermédiaires sur l'itinéraire d'un voyageur, afin 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ées
  • Vélo
  • À pied

Pourquoi utiliser l'optimisation des points de cheminement ?

Lorsque vous créez une application qui guide les utilisateurs à travers un certain nombre de points de cheminement en route vers une destination, il est important que le voyageur les traverse dans l'ordre optimal. Cela permet au voyageur d'arriver à n'importe quel point de cheminement dans les plus brefs délais.

Fonctionnement

Par défaut, ComputeRoutes calcule un itinéraire via ses points de cheminement, dans l'ordre dans lequel ils ont été initialement fournis. Vous pouvez obtenir ComputeRoutes pour 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 dans le 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 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 des points de cheminement optimisé 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 de 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 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 prend plus de temps qu'une requête de routage simple. 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 10 secondes pour l'en-tête de requête X-Server-Timeout. Si vous continuez à recevoir des erreurs d'expiration de délai, 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 la limite d'utilisation maximale pour les points de cheminement intermédiaires sur votre itinéraire:

    • Jusqu'à 98 points de cheminement n'utilisant que des 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 du type stopover. Aucun de vos points de cheminement ne peut être du 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.