Otimizar os waypoints do trajeto

A otimização de waypoints é 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 sigam o trajeto mais eficiente possível. A implementação do ComputeRoutes da otimização de waypoints é compatível com os seguintes meios de transporte:

  • Carro
  • Motocicleta motorizada
  • Bicicleta
  • Caminhada

Por que usar a otimização de waypoints?

Ao criar um app que orienta os usuários por vários waypoints no trajeto até um destino, é importante que o viajante percorra os waypoints na ordem ideal. Isso garante que o viajante chegue a todos os waypoints 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ê 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.

Acessar waypoints reorganizados

Para consultar um trajeto com waypoints reorganizados, defina o campo booleano optimizeWaypointOrder como true no corpo da solicitação como 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 baseados em zero.

Exemplo de solicitação

O exemplo de solicitação a seguir fornece um trajeto perto do campus da Universidade de Stanford. Os waypoints da rota foram fornecidos em sequência 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

Encontre os índices de waypoint intermediários reordenados nos campos optimizedIntermediateWaypointIndex no objeto de rotas no corpo da resposta. A polilinha codificada é a mesma que na API Directions e no 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, a otimização dos waypoints inverte a ordem original.

Uma solicitação com waypoints otimizados leva mais tempo para ser processada do que uma simples solicitação de trajeto. Recomendamos que você defina um tempo limite maior na chamada do método definindo um valor para o cabeçalho da solicitação X-Server-Timeout como pelo menos dez segundos. Se 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 para waypoints intermediários no seu trajeto:

    • 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 pode ser do tipo via.

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

  • Caso sua solicitação tenha 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. Essa distância inclui a origem e o destino.

    • O modo de viagem precisa ser DRIVE.