Visão geral
O serviço Distance Matrix do Google calcula a distância e a duração da viagem entre várias origens e destinos usando um determinado meio de transporte.
Ele não retorna informações detalhadas do trajeto. Informe a origem e o destino únicos desejados para o Directions Service e receba informações do trajeto, incluindo polilinhas e rotas textuais.
Como começar
Antes de usar o serviço Distance Matrix, verifique se a API de mesmo nome está ativada no console do Google Cloud, no mesmo projeto que você configurou para a API Maps JavaScript.
Para saber quais são as APIs ativadas:
- Acesse o console do Google Cloud.
- Clique no botão Selecionar um projeto, escolha aquele que você configurou para a API Maps JavaScript e clique em Abrir.
- Na lista de APIs do Painel, procure a API Distance Matrix.
- Se ela estiver na lista, pode prosseguir. Caso contrário, faça o seguinte para ativar a API:
- Na parte de cima da página, selecione ATIVAR API para abrir a guia Biblioteca. Outra opção é selecionar Biblioteca no menu lateral à esquerda.
- Procure e selecione API Distance Matrix na lista de resultados.
- Clique em ATIVAR. Ao término do processo, a API Distance Matrix aparece na lista de APIs do Painel.
Preços e políticas
Preços
Em 16 de julho de 2018, um novo plano de pagamento por utilização entrou em vigor para o Maps, o Routes e o Places. Consulte Utilização e faturamento da API Distance Matrix e saiba mais sobre os novos preços e limites de uso do serviço Distance Matrix do JavaScript.
Observação: as consultas enviadas ao serviço Distance Matrix são limitadas pelo número de elementos permitidos, definido como o número de origens multiplicado pelo número de destinos.
Políticas
O uso do serviço Distance Matrix precisa estar de acordo com as políticas descritas para a API Distance Matrix.
Solicitações do Distance Matrix
O acesso ao serviço Distance Matrix é assíncrono, já que a API Google Maps precisa chamar um servidor externo. Por esse motivo, para processar os resultados, você tem que transmitir um método de callback a ser executado na conclusão da solicitação.
Acesse o serviço Distance Matrix no seu código usando o objeto construtor google.maps.DistanceMatrixService
.
O método DistanceMatrixService.getDistanceMatrix()
inicia uma solicitação ao serviço Distance Matrix, transmitindo um literal de objeto DistanceMatrixRequest
que contém as origens, os destinos e o meio de transporte, além do método de callback para execução no recebimento da resposta.
var origin1 = new google.maps.LatLng(55.930385, -3.118425); var origin2 = 'Greenwich, England'; var destinationA = 'Stockholm, Sweden'; var destinationB = new google.maps.LatLng(50.087692, 14.421150); var service = new google.maps.DistanceMatrixService(); service.getDistanceMatrix( { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, avoidHighways: Boolean, avoidTolls: Boolean, }, callback); function callback(response, status) { // See Parsing the Results for // the basics of a callback function. }
DistanceMatrixRequest
contém os seguintes campos:
origins
(obrigatório): uma matriz que contém uma ou mais strings de endereço, objetosgoogle.maps.LatLng
ou objetos do Places usados como origem para calcular a distância e o tempo.destinations
(obrigatório): uma matriz que contém uma ou mais strings de endereço, objetosgoogle.maps.LatLng
ou objetos do Places usados como destino para calcular a distância e o tempo.travelMode
(opcional): o meio de transporte a ser usado no cálculo de rotas. Consulte a seção sobre meios de transporte.transitOptions
(opcional): opções usadas apenas para solicitações em quetravelMode
éTRANSIT
. Os valores válidos estão disponíveis na seção sobre opções de transporte público.drivingOptions
(opcional): especifica valores usados apenas para solicitações em quetravelMode
éDRIVING
. Os valores válidos estão disponíveis na seção sobre opções de direção.unitSystem
(opcional): o sistema de unidades a ser usado ao mostrar as distâncias. Os valores aceitos são:google.maps.UnitSystem.METRIC
(padrão)google.maps.UnitSystem.IMPERIAL
avoidHighways
(opcional): quandotrue
, os trajetos calculados entre as origens e os destinos evitam rodovias sempre que possível.avoidTolls
(opcional): quandotrue
, as rotas calculadas entre os pontos usam trajetos sem pedágio sempre que possível.
Meios de transporte
Ao calcular tempos e distâncias, você pode especificar um dos meios de transporte que têm suporte no momento:
BICYCLING
solicita rotas de bicicleta por ciclovias e ruas preferenciais (disponível atualmente apenas nos EUA e em algumas cidades do Canadá).DRIVING
(padrão), indica rotas de carro padrão usando a rede viária.TRANSIT
solicita rotas por trajetos de transporte público. Só é possível especificar essa opção quando a solicitação inclui uma chave de API. Consulte na seção sobre opções de transporte público para saber quais estão disponíveis nesse tipo de solicitação.WALKING
solicita rotas a pé por faixas de pedestre e calçadas (quando disponível).
Opções de transporte público
No momento, o serviço de transporte público ainda é experimental. Nesta fase, estamos implementando limites de taxa para evitar abuso da API. Futuramente, vamos impor um limite para o total de consultas por carregamento de mapa com base no uso normal da API.
As opções disponíveis para uma solicitação de matriz de distância variam entre meios de transporte.
Nas solicitações de transporte público, as opções avoidHighways
e avoidTolls
são ignoradas. Use o literal do objeto TransitOptions
se quiser definir opções de trajeto específicas para transporte público.
As solicitações de transporte público dependem do horário. Só são retornados cálculos para horários futuros.
O literal do objeto TransitOptions
contém os seguintes campos:
{ arrivalTime: Date, departureTime: Date, modes: [transitMode1, transitMode2] routingPreference: TransitRoutePreference }
Esses campos são explicados a seguir:
arrivalTime
(opcional) especifica o horário de chegada desejado como um objetoDate
. O horário de partida é ignorado quando o de chegada é informado.departureTime
(opcional) especifica o horário de partida desejado como um objetoDate
.departureTime
é ignorado quandoarrivalTime
é informado. Se não for especificado nenhum valor paradepartureTime
ouarrivalTime
, o valor padrão será o horário atual (agora).modes
(opcional) é uma matriz que contém um ou mais literais de objetoTransitMode
. Esse campo só é incluído em solicitações com uma chave de API. CadaTransitMode
especifica um meio de transporte preferencial. Estes são os valores permitidos:BUS
indica preferência ao deslocamento por ônibus no trajeto calculado.RAIL
indica preferência ao deslocamento por trem, bonde, veículo leve sobre trilhos (VLT) e metrô no trajeto calculado.SUBWAY
indica preferência ao deslocamento por metrô no trajeto calculado.TRAIN
indica preferência ao deslocamento por trem no trajeto calculado.TRAM
indica preferência ao deslocamento por bonde e veículo leve sobre trilhos (VLT) no trajeto calculado.
routingPreference
(opcional) especifica preferências para trajetos por transporte público. Com esse recurso, é possível direcionar as opções retornadas em vez de aceitar o melhor trajeto padrão escolhido pela API. Só é possível especificar esse campo quando a solicitação inclui uma chave de API. Estes são os valores permitidos:FEWER_TRANSFERS
indica preferência por um número limitado de transferências no trajeto calculado.LESS_WALKING
indica preferência por pouca caminhada no trajeto calculado.
Opções de condução
Use o objeto drivingOptions
para especificar um horário de partida no cálculo do melhor trajeto até seu destino, considerando as condições de trânsito esperadas. Você também pode definir se prefere uma previsão pessimista, otimista ou a melhor estimativa para o tempo de percurso com base nas condições de trânsito históricas e em tempo real.
O objeto drivingOptions
contém estes campos:
{ departureTime: Date, trafficModel: TrafficModel }
Esses campos são explicados a seguir:
departureTime
(obrigatório para que o literal de objetodrivingOptions
seja válido) especifica o horário de partida desejado como um objetoDate
. O valor precisa ser definido como o horário atual ou no futuro, nunca no passado. A API converte todas as datas para UTC, garantindo o processamento consistente entre fusos horários. Se você incluir o objetodepartureTime
na solicitação, a API vai retornar o melhor trajeto conforme as condições de trânsito esperadas no momento e incluir o tempo previsto no trânsito (duration_in_traffic
) na resposta. Se não especificar um horário de partida (ou seja, a solicitação não incluidrivingOptions
), será retornado um trajeto que normalmente é bom, sem considerar as condições de trânsito.trafficModel
(opcional) especifica as premissas que serão usadas no cálculo do tempo no trânsito. Essa configuração afeta o valor retornado no campoduration_in_traffic
na resposta, que contém o tempo previsto no trânsito com base nas médias históricas. O padrão ébest_guess
. Estes são os valores permitidos:bestguess
(padrão) indica que o valor retornado deduration_in_traffic
deve ser a melhor estimativa do tempo de viagem, considerando as informações de condições de trânsito históricas e em tempo real. Quanto mais próximo de agora for o objetodepartureTime
, mais importante será o trânsito em tempo real.pessimistic
indica que o valor retornado deduration_in_traffic
deve ser maior que o tempo de viagem na maioria dos dias, embora ele possa ser maior em alguns dias em que as condições de trânsito são particularmente ruins.optimistic
indica que o valor retornado deduration_in_traffic
deve ser menor que o tempo de viagem na maioria dos dias, embora ele possa ser menor em alguns dias em que as condições de trânsito são particularmente boas.
O exemplo de DistanceMatrixRequest
abaixo mostra trajetos de carro, incluindo horário de partida e modelo de trânsito:
{ origins: [{lat: 55.93, lng: -3.118}, 'Greenwich, England'], destinations: ['Stockholm, Sweden', {lat: 50.087, lng: 14.421}], travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
Respostas do Distance Matrix
Uma chamada bem-sucedida do serviço Distance Matrix retorna os objetos DistanceMatrixResponse
e DistanceMatrixStatus
. Eles são transmitidos à função de callback especificada na solicitação.
O objeto DistanceMatrixResponse
contém informações de distância e duração para cada par origem/destino em que é possível calcular um trajeto.
{ "originAddresses": [ "Greenwich, Greater London, UK", "13 Great Carleton Square, Edinburgh, City of Edinburgh EH16 4, UK" ], "destinationAddresses": [ "Stockholm County, Sweden", "Dlouhá 609/2, 110 00 Praha-Staré Město, Česká republika" ], "rows": [ { "elements": [ { "status": "OK", "duration": { "value": 70778, "text": "19 hours 40 mins" }, "distance": { "value": 1887508, "text": "1173 mi" } }, { "status": "OK", "duration": { "value": 44476, "text": "12 hours 21 mins" }, "distance": { "value": 1262780, "text": "785 mi" } } ] }, { "elements": [ { "status": "OK", "duration": { "value": 96000, "text": "1 day 3 hours" }, "distance": { "value": 2566737, "text": "1595 mi" } }, { "status": "OK", "duration": { "value": 69698, "text": "19 hours 22 mins" }, "distance": { "value": 1942009, "text": "1207 mi" } } ] } ] }
Resultados do Distance Matrix
Estes são os campos permitidos em uma resposta.
originAddresses
é uma matriz que contém os locais transmitidos no campoorigins
da solicitação ao Distance Matrix. Os endereços são retornados formatados pelo geocodificador.destinationAddresses
é uma matriz que contém os locais transmitidos no campodestinations
, no formato retornado pelo geocodificador.rows
é uma matriz de objetosDistanceMatrixResponseRow
em que cada linha corresponde a uma origem.elements
são secundários ao camporows
e correspondem a um par da origem da linha com cada destino. Eles contêm status, duração, distância e informações de tarifa (se disponíveis) para cada par origem/destino.- Cada
element
contém os campos a seguir:status
: consulte uma lista dos valores possíveis em códigos de status.duration
: o tempo de viagem desse trajeto, expresso em segundos (campovalue
) e comotext
. O valor textual é formatado de acordo com o objetounitSystem
especificado na solicitação ou na métrica, caso nenhuma preferência seja informada.duration_in_traffic
: o tempo de viagem desse trajeto considerando as condições de trânsito atuais, expresso em segundos (campovalue
) e comotext
. O valor textual é formatado de acordo com o objetounitSystem
especificado na solicitação ou na métrica, caso nenhuma preferência seja informada. Aduration_in_traffic
só é retornado quando os dados de tráfego estão disponíveis, omode
é definido comodriving
edepartureTime
está incluído como parte dodistanceMatrixOptions
na solicitação.distance
: a distância total do trajeto, expressa em metros (value
) e comotext
. O valor textual é formatado de acordo com o objetounitSystem
especificado na solicitação ou na métrica, caso nenhuma preferência seja informada.fare
: contém a tarifa total (ou seja, o custo total das passagens) para esse trajeto. Essa propriedade só é retornada para solicitações de transporte público e prestadores que disponibilizam informações de tarifas. Estão incluídos:currency
: um código ISO 4217 que indica a moeda em que o valor é expresso.value
: o valor total das tarifas na moeda especificada acima.
Códigos de status
A resposta do serviço Distance Matrix inclui um código de status geral e um para cada elemento.
Códigos de status da resposta
Os códigos usados no objeto DistanceMatrixResponse
são transmitidos em DistanceMatrixStatus
e incluem:
OK
: a solicitação é válida. Esse status pode ser retornado mesmo que nenhum trajeto seja encontrado entre as origens e os destinos. Consulte as informações de status em códigos de status do elemento.INVALID_REQUEST
: a solicitação fornecida era inválida. Geralmente, o motivo é a falta de campos obrigatórios. Consulte a lista de campos permitidos acima.MAX_ELEMENTS_EXCEEDED
: o número de origens e destinos excede o limite por consulta.MAX_DIMENSIONS_EXCEEDED
: a solicitação contém mais de 25 origens ou destinos.OVER_QUERY_LIMIT
: o aplicativo solicitou elementos demais no período permitido. Tente novamente após um intervalo razoável.REQUEST_DENIED
: o uso do serviço Distance Matrix foi recusado para sua página da Web.UNKNOWN_ERROR
: não foi possível processar uma solicitação do Distance Matrix devido a um erro de servidor. Tente novamente.
Códigos de status de elementos
Os códigos a seguir são usados em objetos DistanceMatrixElement
específicos:
NOT_FOUND
: não foi possível geocodificar a origem e/ou o destino deste par.OK
: a resposta contém um resultado válido.ZERO_RESULTS
: não foi possível encontrar nenhum trajeto entre a origem e o destino.
Analisar os resultados
O objeto DistanceMatrixResponse
contém um row
para cada origem que foi transmitida na solicitação. Todas as linhas contêm um campo element
para cada par da origem com os destinos fornecidos.
function callback(response, status) { if (status == 'OK') { var origins = response.originAddresses; var destinations = response.destinationAddresses; for (var i = 0; i < origins.length; i++) { var results = response.rows[i].elements; for (var j = 0; j < results.length; j++) { var element = results[j]; var distance = element.distance.text; var duration = element.duration.text; var from = origins[i]; var to = destinations[j]; } } } }