1ª Forma
Triângulo Pitagórico
Imaginemos 2 pontos P=(x1,y1) e Q=(x2,y2), obtemos a distância entre P e Q, traçando as projeções destes pontos
sobre os eixos coordenados, obtendo um triângulo retângulo e usando o Teorema de Pitágoras. Assim, considerando 2 pontos de coordenadas (-22.902778, -43.206667) e (-23.548333, -46.636111)
Calculando-se a distância entre eles, tem-se: A distância em graus resulta 3,4896744
O raio da terra tem aproximadamente 6371km.
Uma volta na terra tem 2 * pi * raio = 40030000m.
Podemos, através de uma regra de 3 simples, obter a conversão do ângulo encontrado para uma distância em metros:
Código: Selecionar todos
360º - 40030000m
3,4896744º - 388032m
-------------------------------------
2ª Forma
Lei dos Cossenos - Triângulo Esférico
Sabemos, contudo, que a superfície da terra não é plana, é elipsoidal. Podemos, para melhorar a precisão dos cálculos, considerá-la esférica, e utilizar trigonometria esférica.
A Longitude de um ponto no globo terrestre é a distância medida em graus desde o Meridiano de Greenwich, que é a referência de Zero graus - até o Meridiano que passa por esse ponto.
A Latidude de um ponto no globo terrestre é a distância medida em graus desde o Equador Terrestre, que é a referência de Zero Graus - até o círculo paralelo que passa por esse ponto. Como vemos na figura, os pontos formam um triângulo esférico. Ao contrário da trigonometria plana, não é suficiente conhecer dois ângulos para resolver o triângulo esférico. É sempre necessário conhecer no mínimo três elementos: ou três ângulos, ou três lados, ou dois lados e um ângulo, ou um ângulo e dois lados.
Dentre as fórmulas principais para a solução dos triângulos esféricos temos a lei dos cossenos para os lados:
Código: Selecionar todos
cos a = cos b * cos c + sen b * sen c * cos A
cos b = cos a * cos c + sen a * sen c * cos B
cos c = cos a * cos b + sen a * sen b * cos C
O ângulo A, formado entre b e c é a diferença entre as longitudes dos pontos.
Código: Selecionar todos
arco b = 90 - (-22.902778) = 112.902778
arco c = 90 - (-23.548333) = 113.548333
A = -43.206667 - (-46.636111) = 3.429444
cos a = cos b * cos c + sen b * sen c * cos A
cos a = cos(112.902778)*cos(113.548333) + sen(113.548333)*sen(112.902778)*cos(-3.429444)
cos a = (-0,3891686 * -0,3995225) + (0,9167234 * 0,9211665 * 0,9982092)
cos a = 0,1554816 + 0,8429426 = 0,9984242
a = arc cos(0,9984242) = 3,2169568º
Podemos, através de uma regra de 3 simples, obter a conversão do ângulo encontrado para uma distância em metros:
Código: Selecionar todos
360º - 40030000m
3,2169568º - 357708m
------------------------------
3ª Forma
Fórmula de Haversine
A Fórmula de Haversine é equação utilizada em navegação, fornecendo distância entre 2 pontos de uma esfera, a partir de suas latitudes e longitudes. Quando aplicada à Terra, ela representa apenas uma aproximação, pois o nosso planeta não é uma esfera perfeita. O raio da Terra é variável: nos polos é da ordem de 6357km; enquanto que no equador 6378km. Nos cálculos utilizados estamos considerando um valor de raio médio geralmente aceito, 6371km. A imprecisão dos cálculos aumenta conforme nos afastamos da linha do equador.
Se for desejada uma precisão ainda maior do que a obtida com Haversine, aconselha-se a utilização da Fórmula de Vincenty, que leva em consideração o achatamento da Terra nos polos, a sua carterística elíptica.
A fórmula utiliza a função seno verso - versine(). O seno verso de um ângulo A, tem a seguinte relação:
versin(A) = 1 - cos(A). Haversine significa a metade do seno verso (half versine).
Assim, há a relação: (1-cos(A))/2 = sen(A/2) * sen (A/2)
Haversine:
Código: Selecionar todos
Raio_da_terra = 6371; // km
dLat = (lat2-lat1) //diferença das latitudes dos pontos em radianos
dLon = (lon2-lon1) //diferença das longitudes dos pontos em radianos
a = sen(dLat/2) * sen(dLat/2) + cos(lat1) * cos(lat2) * sen(dLon/2) * sen(dLon/2)
c = 2 * atan2(sqrt(a), sqrt(1-a));
distancia = Raio_da_terra * c;
O valor c é a distância em ângulos radianos encontrada.
Então voltemos a calcular, agora com a fórmula haversine, a distância entre os pontos (-22.902778, -43.206667) e (-23.548333, -46.636111). Os ângulos são em radianos.
Código: Selecionar todos
lat1 = -22.902778 * 3.1415927 / 180 = -0.3997289
long1 = -43.206667 * 3.1415927 / 180 = -0.7540986
lat2 = -23.548333 * 3.1415927 / 180 = -0.4109959
long2 = -46.636111 * 3.1415927 / 180 = -0.81395369
dLat = -0.0112671
dLon = -0.0598551
a = sen(-0.00563353)*sen(-0.00563353) + cos(-0.3997289)*cos(-0.4109959)*sen(-0.02992754) = 0.0007878533
c = 0.056144822
----------------------------------
4ª Forma
Google Earth
Utilizando-se da ferramenta régua, medimos a distância entre as coordenadas no mapa.
Desconhecemos o algoritmo e o raio da Terra que o Google utiliza para os cálculos. d = 357781m
----------------------------------
Conclusão
Como observamos, há pouca diferença de resultado entre a 2ª e 3ª forma de cálculo.
A 2ª forma contudo, é pouco indicada para distâncias curtas.
A 4ª forma pode tornar-se imprecisa, já que a marcação da reta é sujeita a erro.
1ª forma - pitágoras - d = 388032m
2ª forma - cossenos - d = 357708m
3ª forma - haversine - d = 357699m
4ª forma - google - d = 357781m
Fontes:
http://astro.if.ufrgs.br/trigesf/trigesf.htm
http://educacao.uol.com.br/matematica/ult1705u43.jhtm
http://mathforum.org/library/drmath/view/51879.html
http://www.movable-type.co.uk/scripts/latlong.html
http://www.brasilescola.com/matematica/ ... etrico.htm
http://caraipora.tripod.com/calc_dist_e ... pontos.htm
http://blog.shander.eng.br/2011/03/calc ... errestres/