Uma introdução à geolocalização ECEF com Python

Leandro Cruvinel
6 min readMar 27, 2019

--

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:

Fonte: http://what-when-how.com/gps/geocentric-earth-fixed-coordinate-systems-gps/

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!

--

--

Leandro Cruvinel
Leandro Cruvinel

Written by Leandro Cruvinel

Math Professor | Data Scientist | Web developer

No responses yet