A otimização de waypoints é um recurso do Routes Preferred que estende
ComputeRoutes
Ele otimiza a ordem dos pontos de referência intermediários na rota de um viajante,
garantindo que ele faça o trajeto mais eficiente possível. A implementação ComputeRoutes
da otimização de ponto de passagem é compatível com os seguintes modos de transporte:
- Carro
- Motocicleta
- Ciclismo
- A pé
Por que usar a otimização de waypoints?
Ao criar um aplicativo que guia os usuários por vários waypoints no caminho um destino, é importante que o viajante percorra os waypoints na na ordem ideal. Isso garante que o viajante chegue a cada ponto de passagem no menor tempo possível.
Como funciona
Por padrão, o ComputeRoutes
calcula uma rota pelos waypoints, na ordem em que foram fornecidos. Você pode fazer com que ComputeRoutes
otimize
a rota reorganizando os pontos de referência intermediários em uma ordem mais eficiente.
Você vai receber uma rota com waypoints otimizados se definir o campo optimizeWaypointOrder
no corpo da solicitação como true
.
Observação: o cálculo de otimização do ponto de passagem é baseado principalmente no tempo de viagem, mas o recurso também considera outros fatores, como distância e número de curvas.
Receber pontos de referência reordenados
Para acessar uma rota com waypoints reorganizados, defina o campo booleano
optimizeWaypointOrder
a true
no corpo da solicitação para
ComputeRoutes
Além disso, inclua o campo optimizedIntermediateWaypointIndex
na máscara de campo. O corpo da resposta contém a ordem otimizada de waypoints nos campos optimizedIntermediateWaypointIndex
.
Observação: o campo optimizedIntermediateWaypointIndex
retorna valores baseados em zero
valores.
Exemplo de solicitação
O exemplo de solicitação a seguir fornece um trajeto perto do Stanford Campus universitário. Os pontos de passagem do trajeto foram fornecidos sequencialmente na solicitação. A solicitação contém uma origem e um destino, com duas métricas waypoints.
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"}
Exemplo de resposta
Você pode encontrar os índices de waypoint intermediários reordenados na
Campos optimizedIntermediateWaypointIndex
no objeto routes na
corpo da resposta. A poligonal codificada é a mesma da API Directions e da 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
}
Neste exemplo, observe que a otimização dos waypoints inverte a ordem original.
Práticas recomendadas
Uma solicitação com waypoints otimizados leva mais tempo para ser processada do que um trajeto simples
solicitação. Portanto, recomendamos que você defina um tempo limite maior na chamada de método
definindo um valor para o cabeçalho de solicitação X-Server-Timeout
de pelo menos dez
segundos. Se continuar recebendo erros de tempo limite, você poderá adicionar mais um segundo
e tente novamente.
Limitações de uso
Para usar a otimização de ponto de passagem, é necessário seguir estas limitações de uso e condições:
É possível especificar até o limite de uso para pontos de passagem intermediários no seu percurso:
- Até 98 waypoints usando apenas coordenadas de latitude e longitude.
- Até 25 waypoints se você especificar waypoints usando IDs de lugares.
Todos os seus waypoints precisam ser do tipo stopover. Nenhum dos seus waypoints podem ser do tipo via.
Você precisa adicionar
routes.optimizedIntermediateWaypointIndex
ao campo máscaraCaso sua solicitação tenha 25 ou mais waypoints intermediários, ela também precisa devem atender às seguintes condições:
A distância em linha reta acumulada entre todos os pontos de referência precisa ser menor que 1.000 km. Essa distância inclui a origem e o destino.
O modo de transporte precisa ser DIRIGIR.