Introdução ao Google Earth Engine

1 de novembro de 2024

Maurício Vancine



  • Ecólogo e Doutor em Ecologia - Unesp
  • Pós-Doc (Mathias Pires - Amazônia)
  • Ecologia Espacial
  • Modelagem Ecológica
  • Análise de Dados Ecológicos e Geoespaciais
  • Ecologia e Conservação de Anfíbios
  • Open source [R, QGIS, GRASS GIS, GNU/Linux, …]

Material

Todo o material está disponível no GitHub

IMPORTANTE!!!

Estamos num espaço seguro e amigável

  • Sintam-se à vontade para me interromper e tirar dúvidas

Google Earth Engine (GEE)

  • Plataforma em nuvem para análise de dados geoespaciais
  • Fornece conjuntos de dados hospedados na nuvem prontos para uso e um grande conjunto de servidores
  • Inclui: catálogo de dados públicos, infraestrutura de computação, API (Application Programming Interface) geoespacial e servidor de aplicativos interativos

API

  • Comunicação com os servidores do Earth Engine
  • Linguagens: JavaScript (JS) e Python

API

JavaScript

  • JavaScript do Earth Engine é “fácil de usar” e é acessado pelo Editor de Código on-line
  • Permite compartilhar código e inclui ferramentas para gráficos, mapas e aplicações web

Google Cloud

Cloud project

Google Cloud

1. Obtenha um projeto

Google Cloud

1. Obtenha um projeto

Google Cloud

1. Obtenha um projeto

Google Cloud

1. Obtenha um projeto

Google Cloud

1. Obtenha um projeto

Google Cloud

2. Habilite a API do Earth Engine

Google Cloud

2. Habilite a API do Earth Engine

Google Cloud

2. Habilite a API do Earth Engine

Acho que tudo certo…

Editor de código

Editor de código


Editor de código


Editor de código


Editor de código


Editor de código


Editor de código


Editor de código

Google Earth Engine Autosave

  • Salva automaticamente o código no GEE, evitando perda ao fechar a aba ou em caso de travamento
  • Armazena o código localmente e o restaura ao reabrir o arquivo, usando o caminho absoluto para evitar conflitos

Editor de código

Open Earth Engine extension

  • Adiciona recursos úteis ao editor de código do GEE
  • modo noturno
  • permite definir a fonte (incluindo o tamanho) do editor de código
  • botão para upload de imagens via arrastar e soltar usando manifests
  • botões (setas) para inserir a assinatura da função da documentação no editor de código
  • cache para a OEEL (Open Earth Engine Library)
  • abre o editor de código ao clicar no ícone (ou a documentação da OEEL se o editor já estiver aberto)
  • permite exportação automática
  • cmd+S para salvar no Mac
  • imagens do PlanetLab (busca / pedido / transferência para o GEE) usando a API do Planet
  • verifica se os assets são compartilháveis ao “obter link”
  • botão para executar todas as tarefas
  • suporte para Plotly no editor de código e no EE App (incluindo eventos)
  • abre o script em uma nova aba ao dar duplo clique
  • terminal para depuração
  • copia JSON ao dar duplo clique no botão JSON
  • console com cabeçalho vermelho para alertas de crash
  • adiciona interface Python
  • link para documentação externa
  • recurso de compartilhamento de código em tempo real

Editor de código

Open Earth Engine extension

Editor de código

Open Earth Engine extension

Rodando os códigos

  • Clique em Run ou ctrl + alt + enter
print('Hello World');

Salvando os scripts

  • Clique em Save ou ctrl + s
  • IMPORTANTE: O salvamento não é automático!

Salvando os scripts

Nome de usuário

  • Na primeira vez de uso do Code Editor é escolhido um nome de usuário do Earth Engine
  • Esse nome será usado para criar a pasta de scripts na nuvem
  • Recomendação: usuário da conta Google, pois o mesmo não pode ser alterado

Salvando os scripts

Repositório

  • Depois que a pasta home é criada, será solicitado a criação de um repositório (pasta)
  • Repositório ajudam organizar e compartilhar scripts

Salvando os scripts

Scripts

  • Scripts são salvos no repositório
  • Script aparecerá no painel do gerenciador de scripts
  • Scripts são salvos na nuvem e estarão disponíveis quando abrir o Code Editor

Dúvidas?

Introdução ao JavaScript

  • Criado em 1995, atualmente o JS é uma das linguagens mais usadas e populares
  • Linguagem interpretada (lido linha a linha) e de alto nível (próximo ao que falamos)
  • HTML, CSS e JS formam a base da internet
  • Principal função do JS: deixar as páginas de internet dinâmicas

Introdução ao JavaScript

Comentários

  • Texto usado para explicar o código ou deixar uma nota
  • Sempre adicionar comentários explicando cada etapa
  • // ou ctrl + / para uma ou mais linhas
  • ctrl + / em linhas comentadas, descomenta-as
// This is a comment!
print('Hello World');

Introdução ao JavaScript

Comentários em múltiplas linhas

  • /** início
  • Comentários
  • **/ fim
/** 
This is a comment in multiple lines!
Nothing here will be executed
**/
print('Hello World');

Introdução ao JavaScript

Variáveis

  • Usadas para armazenar valores de dados
  • Sintaxe: palavra-chave var, nome da variável, igual e valor atribuído
  • Cada declaração do seu script deve terminar com um ponto e vírgula (opcional)
  • Variáveis recebem o tipo automaticamente dependendo do que foi atribuído (e.g. tipo string para texto e numeric para números)
var city = 'San Francisco';
print(city);

var population = 873965;
print(population);

Introdução ao JavaScript

Listas

  • Armazenam múltiplos valores em uma única variável
  • Sintaxe: palavra-chave var, nome da variável, igual e colchetes [], elementos separados por vírgulas
  • Console: aparece com uma seta expansora (), que ao clicar se expande, mostrarando seu conteúdo
  • O número à esquerda de cada item indica seu índice (posição na lista), permitindo se refirir a cada item usando um valor numérico
  • ATENÇÃO: índices começam em zero (0)
var cities = ['San Francisco', 'Los Angeles', 
              'New York', 'Atlanta'];
print(cities);

var cities1 = cities[1];
print(cities1);

Introdução ao JavaScript

Objetos

  • Armazenam múltiplos valores em uma única variável
  • Permitem armazenamento de pares de chave-valor, cada valor é acessível por sua chave (nome), não por um índice numérico
  • Sintaxe: palavra-chave var, nome da variável, igual, chaves {}, elementos nomeados pela chave entre aspas, dois pontos, valor atribuído e ponto e vírgula ;
  • Camel Case: primeira palavra em minúsculas, primeira letra da segunda palavra em maiúscula (API do Earth Engine)
  • Console: impresso com chaves e rótulos, permitindo a recuperação pelos rótulos
var cityData = {
    'city': 'San Francisco',
    'coordinates': [-122.4194, 37.7749],
    'population': 873965
};
print(cityData);

Introdução ao JavaScript

Funções

  • Criadas pelo usuário, realizam cálculos em entradas e retornam saídas modificadas
  • Permitem agrupar operações e repeti-las para diferentes parâmetros, sem necessidade de reescrevê-las
  • Sintaxe: definidas usando a palavra-chave function
  • A mesma função pode ser chamada com diferentes entradas para gerar diferentes saídas
var greet = function(name) {
return 'Hello ' + name;
};
print(greet('World'));
print(greet('Readers'));

Client-side e server-side

Cliente vs servidor

Client-side

  • Operações realizadas no navegador (Editor de código - API JS)
  • Sintaxe e funções do JS, com requisições e alocamentos locais
  • Manipulação de strings, números e programação (loops e controle de fluxo)

Server-side

  • Operações realizadas nos servidores da Google
  • Todas as funções começam com ee.*, com requisições aos servidores
  • Manipulação de dados dos catálogos nos servidores

Cliente vs servidor

  • Ao usar as APIs do Earth Engine — JavaScript ou Python — você está construindo uma cadeia de comandos para enviar aos servidores do Google e depois receber o resultado de volta
  • O código deve ser estruturado para enviar todo o trabalho pesado para o Google e manter o processamento fora dos recursos locais
  • Em outras palavras, seu trabalho no Editor de Código é fazer uma descrição de uma computação. Todos os objetos ee são apenas marcadores de posição para objetos do lado do servidor — seu valor real não existe localmente em seu computador.
  • Para ver ou usar o valor real, ele precisa ser avaliado pelo servidor. Se você imprimir um objeto do Earth Engine, ele chamará getInfo para avaliar e retornar o valor.
  • Em contraste, você também pode trabalhar com listas ou números JavaScript/Python localmente e fazer coisas básicas de JavaScript/Python com eles, como somar números ou fazer loop sobre itens.
  • Esses são objetos do lado do cliente. Sempre que você traz um objeto do lado do servidor para seu ambiente local, há um custo computacional.

Estrutura de um código no GEE

  1. Importar: dados a partir do catálogo, seleção e pré-processamento (selecionar imagens com poucas nuvens em uma janela de tempo específica)
  2. Processar: operações de processamento que resultam em produtos (índices, reduções…)
  3. Visualizar: mapa dos dados e resultados (conferência das análises)
  4. Exportar: dados obtidos do processamento enviados para o Google Drive (de onde baixados para uso num SIG)

Material de estudo

Sites e cursos

Artigos e livros

Muito obrigado!

Acknowledgements:

  • Thiago Sanna
  • Dhemerson Conciani
  • Iago Mendes
  • Yuri Silva