Cómo optimizar tus puntos de referencia de la ruta

La optimización de puntos de referencia es una función de Rutas preferida que extiende ComputeRoutes Optimiza el orden de los puntos de referencia intermedios en la ruta de un viajero y asegurarse de que viajen por la ruta más eficiente posible. El ComputeRoutes La implementación de la optimización de puntos de referencia admite los siguientes medios de transporte:

  • En automóvil
  • Motor 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 el camino hacia un destino, es importante que el viajero recorra los puntos de referencia en la y el orden óptimo. Esto asegura que el viajero llegue en cada punto de referencia del durante 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 aparecen. en la que se proporcionaron originalmente. Puedes obtener ComputeRoutes para realizar optimizaciones. 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 la Campo optimizeWaypointOrder en el cuerpo de la solicitud a true.

Nota: El cálculo de la optimización de puntos de referencia se basa principalmente en la duración del viaje, pero el atributo también considera otros factores, como la distancia y el número de giros.

Cómo obtener puntos de referencia reordenados

Para obtener una ruta con puntos de referencia ordenados, establece el campo booleano optimizeWaypointOrder a 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 puntos de referencia optimizados en los campos optimizedIntermediateWaypointIndex

Nota: El campo optimizedIntermediateWaypointIndex muestra un valor basado en cero de salida.

Ejemplo de solicitud

La siguiente solicitud de ejemplo proporciona una ruta cerca de Stanford Campus universitario. Los puntos de referencia de la ruta se proporcionaron secuencialmente en el para cada solicitud. La solicitud contiene un origen y un destino, con dos valores y puntos de referencia.

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 la Los campos optimizedIntermediateWaypointIndex dentro del objeto de rutas del cuerpo de respuesta. La codificación polilínea es lo mismo que en 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 la optimización de los puntos de referencia revierte su original en el orden personalizado.

El procesamiento de una solicitud con puntos de referencia optimizados demora más que un simple enrutamiento para cada solicitud. Por lo tanto, te recomendamos que establezcas un tiempo de espera mayor en la llamada de método estableciendo un valor para el encabezado de la solicitud X-Server-Timeout en al menos diez segundos. Si sigues recibiendo errores de tiempo de espera, puedes agregar otro segundo. y, luego, vuelve a intentarlo.

Limitaciones de uso

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

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

    • Hasta 98 puntos de referencia usando solo coordenadas de latitud y longitud.
    • Hasta 25 puntos de referencia si especificas algún punto de referencia con los ID de lugar.
  • Todos tus puntos de referencia deben ser del tipo parada. Ninguno de tus puntos de referencia Puede ser del tipo a través de.

  • Debes agregar routes.optimizedIntermediateWaypointIndex al campo. máscara.

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

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

    • El medio de transporte debe ser Drive.