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 para asegurarse de que viaje por la ruta más eficiente posible. La implementación de ComputeRoutes
de la optimización de puntos de referencia admite los siguientes medios de transporte:
- En automóvil
- Motor de dos ruedas
- Ciclismo
- Caminar
¿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 los recorra en el orden óptimo. Esto garantiza que el viajero llegue a cada punto de referencia en el menor tiempo posible.
Cómo funcionan
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
del cuerpo de la solicitud como true
.
Nota: El cálculo de la optimización de puntos de referencia se basa principalmente en la duración del viaje, pero la función también considera otros factores, como la distancia y la cantidad de giros.
Cómo obtener puntos de referencia reordenados
Para obtener una ruta con puntos de referencia ordenados, establece el campo booleano optimizeWaypointOrder
en true
y, en el cuerpo de la solicitud, 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 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 Stanford University. 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. La polilínea codificada es la misma que la de 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, ten en cuenta que la optimización de los puntos de referencia revierte su orden original.
Prácticas recomendadas
El procesamiento de una solicitud con puntos de referencia optimizados demora más que una simple solicitud de enrutamiento. Por lo tanto, te recomendamos que establezcas un tiempo de espera mayor en la llamada de método configurando 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, volver a intentarlo.
Limitaciones de uso
Para usar la optimización de puntos de referencia, debes seguir estas limitaciones y condiciones de uso:
Puedes especificar hasta el límite de uso para puntos de referencia intermedios en la 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
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 puntos de referencia debe ser inferior a 1,000 km, y esta distancia incluye el origen y el destino.
El medio de transporte debe ser Drive.