Guias

Calcule a distância entre dois pontos geocodificados

A distância entre dois endereços não é algo que uma API de geocodificação retorna diretamente, já que o cálculo de distância só precisa de coordenadas, e o endpoint direto já as fornece para qualquer endereço que você enviar.

Obtendo as coordenadas dos dois endereços

Geocodifique cada endereço separadamente, ou os dois juntos em uma única requisição em lote, para obter um par de latitude e longitude para cada um.

POST /v1/forward
Content-Type: application/json

["221B Baker Street, London", "10 Downing Street, London"]
{
  "status": "ok",
  "results": [
    {"formatted": "221B Baker Street, London, UK", "lat": 51.5237, "lon": -0.1585, "type": "address", "precision": "house", "confidence": 0.95, "place_id": "abc123", "components": {}},
    {"formatted": "10 Downing Street, London, UK", "lat": 51.5033, "lon": -0.1276, "type": "address", "precision": "house", "confidence": 0.96, "place_id": "op678", "components": {}}
  ]
}

Calculando a distância

Com os dois pares de coordenadas em mãos, aplique a fórmula padrão de haversine, que converte a diferença de latitude e longitude em uma distância em linha reta sobre a superfície da Terra. A maioria das linguagens de programação tem uma implementação de haversine pequena e bem testada, disponível como uma função curta ou em uma biblioteca comum, então não é preciso escrever a trigonometria do zero.

distance_km = haversine(51.5237, -0.1585, 51.5033, -0.1276)

Um erro comum a evitar

A fórmula de haversine espera latitude e longitude em radianos, mas as coordenadas em uma resposta da API estão sempre em graus. Colocar valores em graus diretamente em uma fórmula escrita para radianos produz uma distância que parece plausível à primeira vista, mas está silenciosamente errada por um fator grande. Converta graus em radianos primeiro, ou use uma função de biblioteca que documente qual unidade espera, e compare o resultado com uma distância que você já conhece antes de confiar nele em produção.

Um segundo exemplo: comprimento total de uma rota com várias paradas

O mesmo cálculo se estende naturalmente a mais de dois pontos. Geocodifique todas as paradas de uma rota em uma única requisição em lote e depois some a distância de haversine entre cada par consecutivo de coordenadas para obter um comprimento total aproximado da rota, útil para uma estimativa rápida de rota de entrega antes mesmo de você ter um roteamento real curva a curva implementado.

total_km = haversine(a, b) + haversine(b, c) + haversine(c, d)

Distância em linha reta versus distância de percurso

Um cálculo de haversine dá a distância em linha reta, não a distância de carro ou a pé pelas vias reais. Para a maioria dos usos, como ordenar locais próximos ou estimar uma proximidade aproximada, a distância em linha reta é suficiente e não precisa de nada além das coordenadas que você já tem. Se você precisa especificamente da distância de percurso por rotas, esse é um tipo de cálculo diferente, fora do que uma consulta de geocodificação oferece.

Um caso extremo que vale conhecer

Dois pontos em lados opostos do antimeridiano, ou muito perto de um polo, podem confundir uma fórmula de distância ingênua que não leva em conta a volta da longitude de 180 para menos 180. Isso é raro em verificações típicas de distância entre endereços, mas vale testar se a sua aplicação realmente abrange essa parte do globo.

Custo das requisições

Geocodificar dois endereços custa duas requisições, sejam enviadas como chamadas separadas ou como uma única chamada em lote. O cálculo da distância em si, depois que você tem os dois pares de coordenadas, acontece inteiramente no seu próprio código e não consome mais nada da sua cota.

Reaproveitando coordenadas que você já tem

Se um dos endereços já foi geocodificado antes e está em cache, só o endereço novo precisa de uma requisição nova, reduzindo o custo daquele cálculo específico para uma requisição em vez de duas.

Cálculos de distância estão a uma requisição de geocodificação de distância para qualquer endereço que você ainda não converteu em coordenadas. Consulte a documentação de geocodificação direta para ver o formato completo da resposta.