Otimizar os waypoints do trajeto

A otimização de pontos de parada é um recurso do Routes Preferred que estende ComputeRoutes. Ele otimiza a ordem dos waypoints intermediários em um trajeto, garantindo que o viajante siga o caminho mais eficiente possível. A implementação da otimização de ComputeRoutes é compatível com os seguintes meios de transporte:

  • Carro
  • Motocicleta
  • Ciclismo
  • Caminhada

Por que usar a otimização de waypoints?

Ao criar um app que orienta os usuários por vários pontos de referência no caminho até um destino, é importante que o viajante passe pelos pontos de referência na ordem ideal. Isso garante que o viajante chegue a todos os pontos de referência no menor tempo possível.

Como funciona

Por padrão, ComputeRoutes calcula um trajeto pelos waypoints, na ordem em que foram fornecidos originalmente. Você pode usar ComputeRoutes para otimizar o trajeto reorganizando os waypoints intermediários em uma ordem mais eficiente. Você vai receber um trajeto com waypoints otimizados se definir o campo optimizeWaypointOrder no corpo da solicitação como true.

Observação: o cálculo de otimização de pontos de parada se baseia 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 receber uma rota com pontos de referência reordenados, defina o campo booleano optimizeWaypointOrder como true no corpo da solicitação para ComputeRoutes. Inclua também o campo optimizedIntermediateWaypointIndex na máscara de campo. O corpo da resposta contém a ordem otimizada dos pontos de parada nos campos optimizedIntermediateWaypointIndex.

Observação: o campo optimizedIntermediateWaypointIndex retorna valores com base zero.

Exemplo de solicitação

O exemplo de solicitação a seguir fornece uma rota perto do campus da Universidade de Stanford. Os waypoints do trajeto foram fornecidos sequencialmente na solicitação. A solicitação contém uma origem e um destino, com dois pontos de parada intermediários.

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

É possível encontrar os índices de ponto de parada intermediário reordenados nos campos optimizedIntermediateWaypointIndex do objeto de rotas no corpo da resposta. A polilinha codificada é a mesma da API Directions e do 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 deles.

Uma solicitação com pontos de parada otimizados leva mais tempo para ser processada do que uma solicitação de roteamento simples. Por isso, 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 os erros de tempo limite continuarem aparecendo, adicione mais um segundo e tente de novo.

Limitações de uso

Para usar a otimização de pontos de passagem, siga estas limitações e condições de uso:

  • É possível especificar até o limite de uso para pontos de referência intermediários na sua rota:

    • Até 98 pontos de referência usando apenas coordenadas de latitude e longitude.
    • Até 25 waypoints se você especificar algum usando IDs de lugar.
  • Todos os waypoints precisam ser do tipo stopover. Nenhum dos seus pontos de referência pode ser do tipo via.

  • Adicione routes.optimizedIntermediateWaypointIndex à máscara de campo.

  • Se a solicitação tiver 25 ou mais pontos de parada intermediários, ela também precisará obedecer às seguintes condições:

    • A distância acumulada em linha reta entre todos os pontos de parada precisa ser menor que 1.000 km. Essa distância inclui a origem e o destino.

    • O meio de transporte precisa ser CARRO.