Otimizar os waypoints do trajeto

A otimização de waypoints é um recurso do Routes Preferred que estende ComputeRoutes Ele otimiza a ordem dos waypoints intermediários na rota de um viajante, garantindo que eles percorrem a rota mais eficiente possível. O ComputeRoutes A implementação da otimização de waypoint é compatível com os seguintes modos de transporte:

  • Carro
  • Motocicleta motorizada
  • 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 todos os waypoints da no menor tempo possível.

Como funciona

Por padrão, ComputeRoutes calcula uma rota pelos waypoints, na ordem em que foram originalmente fornecidos. Você pode receber 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 optimizeWaypointOrder no corpo da solicitação para true.

Observação: o cálculo da otimização do waypoint é baseado principalmente no tempo de viagem, mas o recurso também considera outros fatores, como distância e o número de curvas.

Acessar waypoints reorganizados

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 do waypoint em os campos optimizedIntermediateWaypointIndex.

Observação: o campo optimizedIntermediateWaypointIndex retorna valores baseados em zero e a distribuição dos valores dos dados.

Exemplo de solicitação

O exemplo de solicitação a seguir fornece um trajeto perto do Stanford Campus universitário. Os pontos de referência do trajeto foram fornecidos sequencialmente no 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. O código polilinha é o mesmo que em a API Directions e ComputeRoutes (em inglês).

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 posição original ordem.

Uma solicitação com waypoints otimizados leva mais tempo para ser processada do que um trajeto simples solicitação. Assim, 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, você poderá adicionar mais um segundo e tente novamente.

Limitações de uso

Para usar a otimização de waypoint, você deve seguir estas limitações de uso e condições:

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

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

  • Você precisa adicionar routes.optimizedIntermediateWaypointIndex ao campo máscara

  • Caso sua solicitação tenha 25 ou mais waypoints intermediários, ela também precisa devem atender às seguintes condições:

    • A distância acumulada em linha reta entre todos os pontos de referência deve ser menos de 1.000 km. Essa distância inclui a origem e o destino.

    • O modo de viagem precisa ser DRIVE.