Definir um ponto para um trajeto

Desenvolvedores do Espaço Econômico Europeu (EEE)

Por padrão, a API trata os pontos de parada intermediários como paradas ao longo de um trajeto. No entanto, é possível configurar um ponto de parada intermediário como um ponto de parada via de passagem em que o veículo passa sem parar.

Use pontos de passagem para moldar ou ajustar um trajeto específico. Em vez de dividir o trajeto em paradas de embarque ou desembarque separadas, um waypoint de passagem força o mecanismo de roteamento a passar por um local específico no caminho até o destino, por exemplo, para seguir um trecho de via preferido ou evitar um risco conhecido.

Um trajeto que contém uma origem, um ou mais waypoints intermediários de passagem e um destino contém apenas um trecho que conecta a origem diretamente ao destino.

Para configurar um ponto de passagem intermediário como um ponto de passagem direto, defina a propriedade via do ponto de passagem como true no recurso REST Waypoint ou na mensagem gRPC Waypoint.

Embora a API Routes aceite endereços, IDs de lugar e coordenadas de latitude e longitude, as coordenadas de latitude e longitude, ou latLng, oferecem os ajustes de rota mais precisos para pontos de parada de passagem.

A propriedade via é mais eficaz quando você cria rotas em resposta a arrastar pontos de referência em um mapa. Essa abordagem permite que você veja como o trajeto final aparece em tempo real e ajuda a colocar pontos de referência em locais acessíveis.

Exemplo: definir um ponto de passagem

O exemplo a seguir demonstra como definir "via": true em um ponto de parada intermediário em uma solicitação computeRoutes POST completa:

curl -X POST -d '{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.419734,
        "longitude": -122.0827784
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.417670,
        "longitude": -122.079595
      }
    }
  },
  "intermediates": [
    {
      "location":{
        "latLng":{
          "latitude": 37.419734,
          "longitude": -122.0807784
        }
      },
      "via": true
    }
  ],
  "travelMode": "DRIVE"
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Usar endereços ou IDs de lugar para pontos de passagem

Recomendamos coordenadas de latitude e longitude para um roteamento direto preciso, mas também é possível especificar pontos de passagem intermediários usando uma string de endereço ou um ID de lugar.

Quando você usa um endereço ou ID de lugar para um ponto de passagem direto, a API interpola e ajusta o local à via navegável mais próxima. Esse processo de ajuste à via pode resultar em variações ou imprecisões de rota em comparação com coordenadas exatas.

Se você especificar um ponto de parada usando uma string de endereço ou um plus code, a API fará a geocodificação do local e retornará o ID de lugar correspondente na matriz geocodingResults.intermediates da resposta.

Para cada elemento na matriz intermediates, use a propriedade intermediateWaypointRequestIndex para determinar qual ponto de passagem intermediário na solicitação corresponde ao ID de lugar na resposta.

Exemplo: solicitar IDs de lugares para pontos de passagem diretos

O exemplo a seguir mostra uma solicitação com três pontos de passagem intermediários diretos, cada um especificando "via": true:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "intermediates": [
    {
      "address": "450 Serra Mall, Stanford, CA 94305, USA",
      "via": true
    },
    {
      "location":{
        "latLng":{
          "latitude": 37.419734,
          "longitude": -122.0807784
        }
      },
      "via": true
    },
    {
      "address": "1836 El Camino Real, Redwood City, CA 94063",
      "via": true
    }
  ],
  "travelMode": "DRIVE"
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,geocodingResults' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

A resposta inclui a matriz geocodingResults com os IDs de lugar da origem, do destino e dos dois pontos de parada intermediários especificados por endereço nos índices 0 e 2 da solicitação. A API omite o ponto de referência intermediário no índice 1 de geocodingResults porque você o especificou usando coordenadas de latitude e longitude:

{
  "routes": [
    {
      "distanceMeters": 54200,
      "duration": "2400s",
      "legs": [
        {
          "distanceMeters": 54200,
          "duration": "2400s",
          "startLocation": {
            "latLng": {
              "latitude": 37.4220,
              "longitude": -122.0841
            }
          },
          "endLocation": {
            "latLng": {
              "latitude": 37.7786,
              "longitude": -122.3893
            }
          }
        }
      ]
    }
  ],
  "geocodingResults": {
    "origin": {
      "geocoderStatus": {},
      "type": [
        "premise"
      ],
      "placeId": "ChIJj38IfwK6j4ARNcyPDnEGa9g"
    },
    "destination": {
      "geocoderStatus": {},
      "type": [
        "premise"
      ],
      "placeId": "ChIJI7ES6tl_j4ARVpDZoXbWAiY"
    },
    "intermediates": [
      {
        "geocoderStatus": {},
        "intermediateWaypointRequestIndex": 0,
        "type": [
          "street_address"
        ],
        "placeId": "ChIJvdLMGyq7j4ARScE5tWX_C0Y"
      },
      {
        "geocoderStatus": {},
        "intermediateWaypointRequestIndex": 2,
        "type": [
          "premise"
        ],
        "placeId": "ChIJkTc0GKajj4AR9UMsOSHwGD0"
      }
    ]
  }
}