Guia definitivo: Distância entre coordenadas — fórmula de Haversine e aplicações

A fórmula de Haversine calcula a menor distância entre dois pontos na superfície de uma esfera. Entenda a matemática, limitações e aplicações práticas.

Por que não é só "Pitágoras"

A Terra é aproximadamente uma esfera (mais exatamente, um geoide achatado nos polos). Medir distância em linha reta no plano cartesiano (Pitágoras) introduz erros grandes em distâncias médias e longas.

Para distâncias pequenas (até ~1 km em latitudes médias), a aproximação plana é aceitável. Acima disso, usar Haversine ou Vincenty é necessário.

A fórmula de Haversine

A fórmula parte de dois pontos com coordenadas (lat₁, lon₁) e (lat₂, lon₂), ambas em radianos.

a = sin²(Δlat/2) + cos(lat₁) × cos(lat₂) × sin²(Δlon/2)

c = 2 × atan2(√a, √(1−a))

d = R × c — onde R é o raio médio da Terra (6.371 km).

Exemplo prático

São Paulo (−23,5505, −46,6333) → Rio de Janeiro (−22,9068, −43,1729):

1. Converter para radianos.

2. Aplicar a fórmula: a ≈ 0,00128, c ≈ 0,07155 rad, d = 6.371 × 0,07155 ≈ 456 km.

Distância real em linha reta: 456 km. Pela estrada (Dutra), são cerca de 430 km porque existem curvas e variações de altitude.

Limitações do Haversine

A fórmula é ótima para a maioria dos casos, mas tem imprecisões:

  • Assume Terra esférica perfeita — real é elipsoidal (achatada nos polos)
  • Erro máximo ≈ 0,5% (para o pior caso, na antípoda)
  • Para distâncias < 10 km, o erro é normalmente inferior a 1 metro
  • Para precisão sub-métrica, usar Vincenty (considera elipsoide WGS-84)

Aplicações práticas

Haversine aparece em quase todo sistema com geolocalização:

  • Apps de delivery e mobilidade — distância entre passageiro e motorista
  • Busca "perto de mim" — filtrar estabelecimentos dentro de raio X
  • Monitoramento de frota — rotas, relatórios de quilometragem
  • Aviação e navegação marítima — great-circle distance (mesmo princípio)
  • Ciência e meteorologia — distância entre estações, vórtices, correntes

Implementação rápida

Na prática, bibliotecas fazem tudo: em JavaScript use Turf.js ou Leaflet; em Python, geopy; em SQL, PostGIS (ST_Distance_Sphere ou ST_Distance no geography type).

Para implementação manual, atenção a duas armadilhas: (1) converter graus para radianos antes, (2) usar atan2(√a, √(1−a)) — não asin(√a) — para estabilidade numérica.

Sobre o autor
RC
Renato Candido dos Passos
Fundador e especialista em Blockchain, Fonoaudiologia e Finanças

Fundador da UtilizAí, formado em Blockchain, Criptomoedas e Finanças na Era Digital, com formações complementares em Teologia, Filosofia e em curso de Fonoaudiologia. Saiba mais.

Perguntas frequentes

Haversine funciona com altitude?

Não. Só considera superfície. Para rotas tridimensionais (aviação em voo), é necessário incluir altitudes e trajetória real.

E se os dois pontos são muito próximos?

Funciona, mas a diferença para distância plana é irrelevante. Para precisão < 1 metro em pontos próximos, fórmulas alternativas com ENU (East-North-Up) são melhores.

Qual raio da Terra usar?

O mais aceito é 6.371 km (raio médio). Para WGS-84 específico, 6.378,137 km no equador, 6.356,752 km nos polos. Usar 6.371 é bom para quase tudo.

Haversine retorna km ou metros?

Depende do R que você usar. Se R = 6.371 km → distância em km. Se R = 6.371.000 m → distância em m. Mantenha unidades consistentes.