Uma introdução à geolocalização ECEF com Python
Latitude, longitude e altitude são nomes comuns quando se trata de sistemas de geolocalização. Poucas pessoas conhecem outros sistemas como o ECEF. Neste post conheceremos esse sistema pouco comum.
Este post é voltado para alunos de ensino superior que possuem pouca ou nenhuma noção de programação com Python. Recomendado para professores e alunos que estão cursando Geometria Analítica.
Sumário
Este post está dividido nos seguintes tópicos:
- Sistema Latitude, Longitude e Altitude (LLA)
- Sistema Terra-Centro Terra-Fixa (ECEF)
- A matemática por trás da transformação de LLA para ECEF
- Obtendo coordenadas LLA de um ponto
- De LLA para ECEF com Python: a ferramenta Google Colab
- De LLA para ECEF com Python: o código (em apenas 4 linhas)
- Aplicação: A área do Palácio da Alvorada!
Sistema LLA
No sistema Latitude-Longitude-Altitude, ou simplesmente LLA, todo ponto P na terra é representado por três coordenadas: latitude, longitude e altitude. Cada uma dessas coordenadas é definida a seguir:
- Latitude: é a medida do ângulo entre o plano do equador e o vetor OP, onde O representa o centro da Terra. Ao norte essa medida atinge no máximo 90º e ao sul no mínimo -90º. O centro do sistema é considerado como sendo o centro da terra.
- Longitude: é a medida do ângulo formado pelo plano que contém o Meridiano de Greenwich e o vetor OP. A leste e a Oeste, essa medida, também por convenção, atinge no máximo 180º e no mínimo -180º.
- Altitude: é a altura h do ponto P em relação ao nível local do mar, isto é, para o cálculo de h. O nível do local do mar será denotado por N.
Sistema ECEF
No sistema ECEF, um ponto P é representado por coordenadas cartesianas (x,y,z). O referencial tridimensional é considerado o seguinte:
- origem: Centro do planeta terra
- eixo x: Semi-reta da origem até o ponto de interseção do Meridiano de Greenwich com o Equador.
- eixo y: No plano contendo a linha do equador move-se o eixo x 90º para o leste.
- eixo z: Do polo sul para o polo norte
A matemática por trás da transformação de LLA para ECEF
Dadas as coordenadas latitude ϕ, longitude λ e altitude h de um ponto P, para determinar as coordenadas (x,y,z) ECEF do ponto P utiliza-se a seguinte fórmula:
Obtendo coordenadas LLA de um ponto
Existem vários sites que oferecem esse serviço. Para latitude e longitude, o mais comum é o Google Maps. Consideraremos o ponto P sendo o Palácio da Alvorada, residência do presidente do Brasil.
No Google Maps, após digitar o endereço procurado na busca, a url mostrada na barra de navegação do seu navegador revela a latitude e a longitude daquele local.
Neste exemplo, a latitude é -15.7899 e a longitude é -47.9038.
O site Elevation finder mostra para você qual a altura dado um endereço.
De LLA para EFEC na prática
O site do departamento de oceanografia da Naval PostGraduate School fornece um um conversor simples e intuitivo.
Utilizaremos as coordenadas do Palácio da Alvorada para ilustrar como o conversor funciona:
De LLA para ECEF com Python: A ferramenta
Utilizaremos Python para determinar as coordenadas (x,y,z) encontradas acima. A escolha de Python se deve pelo fato de ser uma linguagem de programação recomendada para iniciantes.
Para executarmos nosso código em Python utilizaremos o Google Colab do Google. Assim, não precisaremos instalar nada em nosso computador. Será necessário uma conexão com a internet.
- Entre no site: Google Colab
- Clique em “File” e depois em “New Python 3 Notebook”. Logue com a conta do Gmail.
Se tudo correu bem aparecerá a seguinte tela:
O colabore funciona como uma calculadora. Digitamos uma “conta” e ele retorna o resultado depois de apertarmos “play”.
O exemplo acima é apenas uma simples e humilde ilustração de como o Google Colab funciona. Na verdade, ele pode calcular desde derivadas, limites, integrais, até a probabilidade do valor da ação de uma grande empresa cair. Basta para isso conhecer os códigos e a teoria por trás de cada processo que deseja executar.
Utilizaremos o Google Colab para transformar as coordenadas LLA em coordenadas ECEF.
Utilizar um programa que faça isso é importante para automatizar futuros processos. Automatizar processos é importante para diminuir custos e tempo.
Para criar uma nova célula e assim poder executar mais comandos, use o botão “Code” mostrado na imagem abaixo:
De LLA para ECEF com Python: O código
Muitos programadores criam bibliotecas com “cálculos”, “fórmulas” ou “contas” mais elaboradas. Utilizaremos as palavras corretas: funções ou códigos.
Para usar alguma dessas poderosas funções temos que seguir três passos:
- instalar a biblioteca caso não tenha instalado antes
- importar a função desejada da biblioteca
- chamar a função de acordo com as instruções desta
Utilizando “hashtags” antes de um código digitado no Google Colab faz com que o Python não leia aquela linha. Logo utiliza-se “hashtags” para fazer comentários no código. Dessa forma, as linhas com “hashtags” podem ser ignoradas.
Seguindo o passo a passo, primeiro instalamos a biblioteca. Nesse caso a biblioteca pymap3d.
O próximo passo é importar a função desejada da biblioteca:
Por fim, utilizaremos a função para transformar coordenadas geodésicas LLA para coordenadas ECEF. No exemplo a seguir utilizamos as coordenadas do Palácio da Alvorada.
Observe que nesse caso, as coordenadas ECEF resultantes são dadas em metros.
A área do Palácio da Alvorada
Como aplicação estimaremos a área, incluindo o espaço verde, do Palácio da Alvorada.
Primeiro, notamos que a área é aproximadamente um triângulo.
As coordenadas LLA em metros dos pontos A, B e C, obtidas através do site “freemaptools”, são aproximadamente:
- A = (-15.78840, -407.82532, -9999.0)
- B = (-15.79550, -407.82558, -9999.0)
- C = (-15.79197, -407.81884, -9999.0)
Convertendo para ECEF temos:
No curso de geometria analítica você aprenderá que a área do triângulo é a metade da norma do produto vetorial entre dois vetores que representam dois lados distintos deste triângulo. É possível fazer essa conta em Python:
- Na linha 1 importamos outra biblioteca muito utilizada para trabalhar com vetores, a saber, a biblioteca numpy.
- Da linha 4 a linha 12, transformamos os pontos que encontramos em objetos da biblioteca numpy. Nesse caso, o objeto é chamado de numpy array. Isso é necessário para operar os pontos.
- Na linha 15 calculamos o produto vetorial do vetor AB com o vetor AC.
- Na linha 18 calculamos a norma do produto vetorial e, também, dividimos por 2. O valor encontrado é a área procurada.
- Por fim, na linha 21, imprimimos o resultado.
Conclusão
Neste post aprendemos:
- O que é o sistema LLA
- O que é o sistema ECEF
- Como obter coordenadas LLA com o Google map
- Como obter coordenadas LLA com o site freemaptools
- Como converter LLA para ECEF com o site freemaptools
- Como utilizar o Jupyter Colab do Google
- Como converter LLA para ECEF com Python
- Como calcular área triangular utilizando ECEF e Python
Desafio
Vou deixar aqui um desafio para vocês:
Calcular a área do Palácio da Alvorada sem a área verde!
Bons estudos e até a próxima \o
Este post tem uma adaptação em Jupyter Notebook no meu Github. Para acessá-lo, clique aqui!