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.
Primeiros passos
Antes de usar o serviço Distance Matrix na API Maps JavaScript, verifique se a API Distance Matrix (legado) 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 o que você configurou para a API Maps JavaScript e selecione Abrir.
- Na lista de APIs do Painel, procure a API Distance Matrix (legado).
- Se achar a API na lista, está tudo pronto. Se a API não estiver listada, ative-a em https://console.cloud.google.com/apis/library/distance-matrix-backend.googleapis.com.
Preços e políticas
Preços
Para saber mais sobre os preços e as políticas de uso do serviço JavaScript Distance Matrix, consulte Uso e faturamento da API Distance Matrix (legado).
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 (legado).
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.LatLngou 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.LatLngou 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:
BICYCLINGsolicita 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.TRANSITsolicita 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.WALKINGsolicita 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 paradepartureTimeouarrivalTime, 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. CadaTransitModeespecifica um meio de transporte preferencial. Estes são os valores permitidos:BUSindica preferência ao deslocamento por ônibus no trajeto calculado.RAILindica preferência ao deslocamento por trem, bonde, veículo leve sobre trilhos (VLT) e metrô no trajeto calculado.SUBWAYindica preferência ao deslocamento por metrô no trajeto calculado.TRAINindica preferência ao deslocamento por trem no trajeto calculado.TRAMindica 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_TRANSFERSindica preferência por um número limitado de transferências no trajeto calculado.LESS_WALKINGindica 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 objetodrivingOptionsseja 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 objetodepartureTimena 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_trafficna 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_trafficdeve 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.pessimisticindica que o valor retornado deduration_in_trafficdeve 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.optimisticindica que o valor retornado deduration_in_trafficdeve 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 campooriginsda 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 objetosDistanceMatrixResponseRowem que cada linha corresponde a uma origem.elementssão secundários ao camporowse 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
elementconté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 objetounitSystemespecificado 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 objetounitSystemespecificado na solicitação ou na métrica, caso nenhuma preferência seja informada. O valor deduration_in_trafficsó é retornado quando os dados de trânsito estão disponíveis,modeestá definido comodrivingedepartureTimefaz parte do campodistanceMatrixOptionsna solicitação.distance: a distância total do trajeto, expressa em metros (value) e comotext. O valor textual é formatado de acordo com o objetounitSystemespecificado 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]; } } } }