Como fazer um cálculo de "grande círculo" no MS Excel ou no LibreOffice?

2

Eu tenho duas colunas com valores de latitude e longitude. Eu preciso calcular a distância entre os pontos em cada linha. Estou tentando usar a fórmula haversine conforme visto aqui :

Esseéochamadocálculode"grande círculo". Eu preciso executar esse cálculo em uma quantidade enorme de coordenadas.

Os dados parecem com isso:

  |        A        B    C    D    E   F    G
--|-------------------------------------------
0 |      LAT      LON rLAT dLAT dLON   a DIST
1 | 52.39964 13.04729  ...  ...  ... ...     
2 | 52.39985 13.04802  ...  ...  ... ...  ???
3 | 52.40116 13.04744  ...  ...  ... ...  ???
4 | 52.40147 13.04722  ...  ...  ... ...  ???
5 | 52.40163 13.04685  ...  ...  ... ...  ???
6 |      ...      ...  ...  ...  ... ...  ...

Agora, o que tentei é o seguinte para o campo G2 no LibreOffice:

C2=RADIANS(A2)
D2=RADIANS(A2-A1)
E2=RADIANS(B2-B1)
F2=SIN(D2/2)*SIN(D2/2)+SIN(E2/2)*SIN(E2/2)*COS(C1)*COS(C2)
G2=2*ATAN2(SQRT(F2), SQRT(1-F2))*6371

O resultado para G2 é 20015 , o que é bastante ... errado.

Como faço para calcular a distância entre dois pontos especificados por latitude e longitude no Microsoft Excel ou no LibreOffice Calc? O que há de errado com a minha fórmula?

    
por Afri 02.06.2013 / 17:26

3 respostas

4

Como foi encontrado aqui por BrianAdkins , esta fórmula do Excel para calcular a distância entre dois pontos de latitude / longitude funciona para mim tanto no LibreOffice Calc quanto no Microsoft Excel 2013:

=ACOS(COS(RADIANS(90-A1))*COS(RADIANS(90-A2))+SIN(RADIANS(90-A1))*SIN(RADIANS(90-A2))*COS(RADIANS(B1-B2)))*6371

O resultado é em quilômetros, para pequenas distâncias usei *1000 para exibir a distância em metros.

  |        A        B      C
--|--------------------------
0 |      LAT      LON   DIST
1 | 52.39964 13.04729               
2 | 52.39985 13.04802   54.8
3 | 52.40116 13.04744  150.9
4 | 52.40147 13.04722   37.6
5 | 52.40163 13.04685   30.8
6 |      ...      ...    ...

Para exibir distâncias em milhas, substitua *6371 por *3958 .

    
por 02.06.2013 / 19:11
2

O método Haversine é bom contanto que você esteja disposto a aceitar um fator de erro ou se precisar implementá-lo somente com uma fórmula de planilha. Para curtas distâncias e situações não críticas, provavelmente será ok. Mas se você precisa de precisão, você precisa usar algo como o algoritmo desenvolvido por Thaddeus Vincenty. Seus resultados são considerados precisos em milímetros, com base na precisão dos pares lat / long usados. Quanta diferença entre os dois? Entre JFK e Tóquio, há uma diferença de cerca de 14,9 milhas estatutárias (curta). Entre Los Angeles e Honolulu, você estará apenas a cerca de 5 km da ilha.

Uma boa implementação do algoritmo Vincenty no Visual Basic (como no Excel) pode ser encontrada em: link O código será executado "como está" nas versões de 32 bits do Excel, mas falhará com um erro de "fórmula muito complexa" na versão de 64 bits do Excel. Logo abaixo da postagem de todo o código, publiquei uma correção para esse problema que permite que ele seja executado nas versões de 32 e 64 bits do mecanismo do VBA.

Atenciosamente, J.Latham, Microsoft MVP, Excel 2006-2014

    
por 02.09.2014 / 07:54
0

Conclua as fórmulas de Vincenty do direct / inverse Excel Excel VBA (add-in de 32/64 bits), permitindo não apenas o cálculo da distância, mas azimute e azimute reverso, bem como disponível em link

    
por 14.07.2018 / 01:19