Distância entre coordenadas GPS: a fórmula de haversine
O que é a distância entre coordenadas GPS
Quando tens duas coordenadas geográficas — dois pares de latitude e longitude — e queres saber a distância real entre elas, não podes tratá-las como pontos num plano cartesiano. A Terra é (aproximadamente) uma esfera, e a distância mais curta entre dois pontos numa esfera segue um arco chamado círculo máximo, não uma linha recta.
Este cálculo é fundamental em navegação marítima, aviação, aplicações móveis (Uber, Bolt, Glovo), logística de entregas, encontro de estações de serviço próximas, tracking de rotas em corrida e ciclismo, geocaching e sempre que uma app te diz “está a X km de si”. A fórmula usada por defeito nestes casos é a haversine, formulada como conhecida hoje pelo astrónomo inglês James Andrew em 1805 e popularizada nas tábuas náuticas do final do século XIX. O termo “haversine” (hav(θ) = sin²(θ/2)) já aparecia em cálculos de rota de Edmond Halley e outros no século XVIII.
Para distâncias curtas (< 50 km), uma aproximação euclidiana com correcção de latitude é boa e muito mais rápida. Para distâncias grandes, a haversine é essencial.
Fórmula
Sejam φ₁, λ₁ e φ₂, λ₂ as latitudes e longitudes dos dois pontos, todas em radianos. Definem-se as diferenças Δφ = φ₂ − φ₁ e Δλ = λ₂ − λ₁. A distância d calcula-se por:
a = sin²(Δφ/2) + cos(φ₁) × cos(φ₂) × sin²(Δλ/2)
c = 2 × atan2(√a, √(1−a))
d = R × c
Onde R é o raio da Terra. O valor médio convencional é R = 6371 km (raio quadrático médio). Alguns autores usam 6378,137 km (raio equatorial WGS84) ou 6356,752 km (raio polar). Para a maioria das aplicações civis, 6371 km dá erro inferior a 0,5%.
Para converter graus em radianos: multiplica por π/180. Um telemóvel devolve coordenadas em graus decimais (38,7223, −9,1393), logo antes de aplicar a fórmula tens de converter.
A aproximação euclidiana com correcção para distâncias curtas:
d ≈ R × √((Δφ)² + (cos(φ_médio) × Δλ)²)
Erro < 0,1% em distâncias até 100 km.
Exemplo prático
Lisboa (Rossio) a Porto (Aliados):
- Lisboa:
φ₁ = 38,7139°,λ₁ = −9,1394° - Porto:
φ₂ = 41,1494°,λ₂ = −8,6108°
Em radianos: φ₁ = 0,6757, λ₁ = −0,1595, φ₂ = 0,7182, λ₂ = −0,1503. Deltas: Δφ = 0,0425, Δλ = 0,00923.
a = sin²(0,02125) + cos(0,6757) × cos(0,7182) × sin²(0,00461) ≈ 0,000451 + 0,7801 × 0,7519 × 0,0000213 ≈ 0,000464c = 2 × atan2(√0,000464, √(1−0,000464)) ≈ 0,04309d = 6371 × 0,04309 ≈ 274,5 km
Distância aérea real Lisboa–Porto: ≈ 274 km. Bate certo.
Comparação com um caminho rodoviário: Google Maps devolve ~313 km (A1). A haversine dá a distância em linha recta sobre a esfera — a distância por estrada é sempre maior. É a diferença entre “cegonhas” e viajantes.
Contexto em Portugal
Portugal continental estende-se aproximadamente de 36,96°N (Vila Real de Santo António) a 42,15°N (Melgaço) e de −9,50°W (Cabo da Roca) a −6,19°W (Miranda do Douro). O comprimento máximo é ~560 km e a largura ~220 km — todo o território cabe em distâncias onde a fórmula haversine é o gold-standard.
Nas ilhas, a haversine é ainda mais útil: da Madeira ao continente (~1000 km) e dos Açores (Ponta Delgada) a Lisboa (~1450 km) já entra em regime onde a curvatura da Terra é significativa. Serviços marítimos e aéreos portugueses (NAV Portugal, Marinha) fazem estes cálculos por sistemas GNSS certificados.
Um GPS civil comum tem precisão de 3–5 metros com sinal aberto. Erros maiores (10–20 m) surgem em cânions urbanos e sob coberto florestal denso. Portanto, calcular distância com 6 casas decimais na latitude é irrelevante — o próprio input tem 10 m de incerteza.
Erros comuns
Aplicar Pitágoras directamente sobre graus. d = √(Δlat² + Δlon²) × constante só funciona muito perto do equador. Em Portugal, um grau de longitude a 40°N mede 85 km, enquanto um grau de latitude mede 111 km. Ignorar isso dá erros de 20% ou mais.
Esquecer a conversão para radianos. As funções sin e cos em quase todas as linguagens de programação esperam radianos. Passar graus dá resultados absurdos.
Confundir latitude com longitude. Latitude é norte–sul (paralelos), longitude é leste–oeste (meridianos). Trocar a ordem numa API dá coordenadas no oceano ou noutro continente.
Assumir Terra esférica onde precisas de precisão sub-métrica. Para geodesia rigorosa (topografia, cadastro), usa-se um elipsóide (WGS84) e a fórmula de Vincenty. Haversine tem erro máximo de ~0,5% face a Vincenty.
Confundir distância em linha recta com distância por estrada. A haversine ignora estradas, montanhas, rios. Para tempos de viagem, precisas de uma API de routing.
Ver também
- Trigonometria — base matemática da fórmula
- Ângulos: conversão de unidades
- Distância entre pontos — versão cartesiana