Otimizar os waypoints do trajeto

A otimização de waypoint é um recurso do Routes Preferred que estende o ComputeRoutes. Ela otimiza a ordem dos waypoints intermediários no trajeto de um viajante, garantindo que eles viajam pelo trajeto mais eficiente possível. A implementação ComputeRoutes da otimização de waypoints é compatível com os seguintes meios de transporte:

  • Carro
  • Bicicleta motorizada
  • Bicicleta
  • Caminhada

Por que usar a otimização de waypoint?

Ao criar um app que orienta os usuários por vários waypoints no trajeto até um destino, é importante que o viajante percorra esses waypoints na ordem ideal. Isso garante que o viajante chegue a cada waypoint no menor tempo possível.

Como funciona

Por padrão, ComputeRoutes calcula um trajeto pelos waypoints, na ordem em que foram originalmente fornecidos. 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 do waypoint é baseado principalmente no tempo de viagem, mas o recurso também considera outros fatores, como distância e número de curvas.

Ver waypoints reordenados

Para conferir um trajeto com waypoints reordenados, defina o campo booleano optimizeWaypointOrder como 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 do waypoint nos campos optimizedIntermediateWaypointIndex.

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

Exemplo de solicitação

O exemplo de solicitação a seguir fornece um trajeto perto do campus da Stanford University. Os waypoints da rota foram fornecidos sequencialmente na solicitação. A solicitação contém uma origem e um destino, com dois waypoints 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 waypoints intermediários reordenados nos campos optimizedIntermediateWaypointIndex dentro do objeto routes 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
}

Nesse exemplo, a otimização dos waypoints inverte a ordem original.

O processamento de uma solicitação com waypoints otimizados leva mais tempo do que uma simples solicitação de roteamento. Por isso, recomendamos que você defina um tempo limite maior na chamada de método definindo um valor para o cabeçalho da solicitação X-Server-Timeout como pelo menos dez segundos. Se você continuar recebendo erros de tempo limite, adicione mais um segundo e tente novamente.

Limitações de uso

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

  • Você pode especificar até o limite de uso de waypoints intermediários no trajeto:

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

  • É preciso adicionar routes.optimizedIntermediateWaypointIndex à máscara de campo.

  • Se a solicitação tem 25 ou mais waypoints intermediários, ela também precisa atender às seguintes condições:

    • A distância em linha reta acumulada entre todos os waypoints precisa ser inferior a 1. 000 km,incluindo a origem e o destino.

    • O modo de viagem precisa ser DRIVE.