Cómo optimizar tus puntos de referencia de la ruta

La optimización de puntos de referencia es una función de Preferencias de rutas que extiende ComputeRoutes. Optimiza el orden de los puntos de referencia intermedios en la ruta de un viajero, lo que garantiza que recorra la ruta más eficiente posible. La implementación de ComputeRoutes de la optimización de puntos de referencia admite los siguientes modos de viaje:

  • En automóvil
  • Vehículo motorizado de dos ruedas
  • Ciclismo
  • A pie

¿Por qué usar la optimización de puntos de referencia?

Cuando compilas una app que guía a los usuarios a través de una serie de puntos de referencia en ruta hacia un destino, es importante que el viajero recorra los puntos de referencia en el orden óptimo. Esto garantiza que el viajero llegue a cada punto de referencia en el menor tiempo posible.

Cómo funciona

De forma predeterminada, ComputeRoutes calcula una ruta a través de sus puntos de referencia, en el orden en que se proporcionaron originalmente. Puedes obtener ComputeRoutes para optimizar la ruta reorganizando los puntos de referencia intermedios en un orden más eficiente. Recibirás una ruta con puntos de referencia optimizados si configuras el campo optimizeWaypointOrder en el cuerpo de la solicitud como true.

Nota: El cálculo de optimización de los puntos de referencia se basa principalmente en el tiempo de viaje, pero la función también considera otros factores, como la distancia y la cantidad de giros.

Cómo obtener puntos de ruta reordenados

Para obtener una ruta con puntos de referencia reordenados, establece el campo booleano optimizeWaypointOrder en true en el cuerpo de tu solicitud a ComputeRoutes. Además, incluye el campo optimizedIntermediateWaypointIndex en la máscara de campo. El cuerpo de la respuesta contiene el orden de punto de referencia optimizado en los campos optimizedIntermediateWaypointIndex.

Nota: El campo optimizedIntermediateWaypointIndex muestra valores basados en cero.

Ejemplo de solicitud

En la siguiente solicitud de ejemplo, se proporciona una ruta cerca del campus de la Universidad de Stanford. Los puntos de referencia de la ruta se proporcionaron de forma secuencial en la solicitud. La solicitud contiene un origen y un destino, con dos puntos de referencia intermedios.

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"}

Ejemplo de respuesta

Puedes encontrar los índices de puntos de referencia intermedios reordenados en los campos optimizedIntermediateWaypointIndex dentro del objeto de rutas en el cuerpo de la respuesta. El polilínea codificado es el mismo que en la API de Directions y 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
}

En este ejemplo, observa que, si optimizas los puntos de referencia, se invierte su orden original.

Una solicitud con puntos de referencia optimizados tarda más en procesarse que una solicitud de enrutamiento simple. Por lo tanto, te recomendamos que establezcas un tiempo de espera más alto en la llamada al método. Para ello, establece un valor para el encabezado de solicitud X-Server-Timeout de al menos diez segundos. Si sigues recibiendo errores de tiempo de espera, puedes agregar otro segundo y, luego, volver a intentarlo.

Limitaciones de uso

Para usar la optimización de puntos de referencia, debes cumplir con estas limitaciones y condiciones de uso:

  • Puedes especificar hasta el límite de uso para los puntos intermedios en tu ruta:

    • Hasta 98 puntos de referencia con solo coordenadas de latitud y longitud
    • Hasta 25 puntos de referencia si especificas alguno con IDs de lugar
  • Todos los puntos de referencia deben ser del tipo parada. Ninguno de tus puntos de referencia puede ser del tipo via.

  • Debes agregar routes.optimizedIntermediateWaypointIndex a la máscara de campo.

  • Si tu solicitud tiene 25 o más puntos de referencia intermedios, también debe cumplir con las siguientes condiciones:

    • La distancia en línea recta acumulada entre todos los waypoints debe ser inferior a 1,000 km. Esta distancia incluye el origen y el destino.

    • El modo de viaje debe ser CONDUCIR.