La optimización de paradas intermedias es una función de Rutas preferidas que extiende ComputeRoutes
.
Optimiza el orden de los puntos de referencia intermedios en la ruta de un viajero, lo que garantiza que viaje por la ruta más eficiente posible. La implementación de ComputeRoutes
de la optimización de paradas intermedias admite los siguientes medios de transporte:
- 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 varios puntos de referencia en ruta hacia un destino, es importante que el viajero atraviese los puntos de referencia en el orden óptimo. Esto garantiza que el viajero llegue a cada punto de ruta 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 reordenando 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 la optimización de paradas intermedias se basa principalmente en el tiempo de viaje, pero la función también tiene en cuenta otros factores, como la distancia y la cantidad de giros.
Obtén waypoints reordenados
Para obtener una ruta con los puntos de referencia reordenados, establece el campo booleano optimizeWaypointOrder
en true
en el cuerpo de tu solicitud a ComputeRoutes
. También incluye el campo optimizedIntermediateWaypointIndex
en la máscara de campo. El cuerpo de la respuesta contiene el orden optimizado de los puntos de ruta en los campos optimizedIntermediateWaypointIndex
.
Nota: El campo optimizedIntermediateWaypointIndex
devuelve valores basados en cero.
Ejemplo de solicitud
En el siguiente ejemplo de solicitud, 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 los puntos intermedios reordenados en los campos optimizedIntermediateWaypointIndex
dentro del objeto de rutas en el cuerpo de la respuesta. La polilínea codificada es la misma 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 la optimización de los puntos de referencia invierte su orden original.
Prácticas recomendadas
Una solicitud con puntos de referencia optimizados tarda más en procesarse que una solicitud de rutas 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 paradas intermedias, debes cumplir con las siguientes limitaciones y condiciones de uso:
Puedes especificar hasta el límite de uso para las paradas intermedias 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 tus puntos de referencia deben ser del tipo parada. Ninguno de tus puntos de referencia puede ser del tipo vía.
Debes agregar
routes.optimizedIntermediateWaypointIndex
a la máscara de campo.Si tu solicitud tiene 25 o más paradas intermedias, también debe cumplir con las siguientes condiciones:
La distancia acumulada en línea recta entre todos los puntos de referencia debe ser inferior a 1,000 km. Esta distancia incluye tanto el origen como el destino.
El modo de viaje debe ser DRIVE.