Google Earth Engine: A Referência Técnica Aprofundada
Domine processamento geoespacial em escala. Aprenda scripts avançados, workflows profissionais, interpretação técnica e aplicações comerciais com Google Earth Engine.
📑 Índice Rápido
1. Conceitos Fundamentais: O Que É Google Earth Engine?
1.1 Definição Técnica Aprofundada
Google Earth Engine (GEE) é uma plataforma de computação distribuída em nuvem otimizada para análise geoespacial de grandes volumes de dados. Diferentemente de softwares SIG tradicionais (ArcGIS, QGIS), o GEE:
- Não executa localmente – roda em servidores Google com arquitetura distribuída
- Processa em paralelo – divide tarefas entre milhares de máquinas simultaneamente
- Acessa dados nativamente – sem necessidade de download
- Oferece escalabilidade infinita – processa desde pixeis até continentes sem perda de performance
| Componente | Função Técnica | Especificações |
|---|---|---|
| Code Editor | Interface web de desenvolvimento | JavaScript, execução assíncrona |
| Catálogo de Dados | Datasets geoespaciais integrados | 2.3 petabytes, atualização contínua |
| API JavaScript | Linguagem para processamento | Lazy evaluation, deferred execution |
| MapReduce Distribuído | Computação paralela em nuvem | Automático, otimizado internamente |
| Visualização Interativa | Mapas WebGL renderizados | Zoom até 30 metros, camadas múltiplas |
1.2 Arquitetura Interna (2026)
Quando você executa um script no GEE, ocorre este fluxo:
1. [Seu Script JavaScript]
↓
2. [Compilador GEE]
↓
3. [Otimizador de Query]
↓
4. [Distribuidor de Tarefas]
↓
5. [Servidores Google - Mapreduce]
├─ Servidor 1: Processa pixels 0-1000
├─ Servidor 2: Processa pixels 1000-2000
├─ Servidor 3: Processa pixels 2000-3000
└─ Servidor N: ...
↓
6. [Agregação de Resultados]
↓
7. [Visualização no Browser]
1.3 Dados Disponíveis (Catálogo 2026)
| Satélite | Resolução | Frequência | Série Temporal | Uso Recomendado |
|---|---|---|---|---|
| Sentinel-2 | 10-60 m | 5 dias | 2015-presente | Precisão, mudanças rápidas, agricultura |
| Landsat 8/9 | 15-30 m | 16 dias | 1984-presente | Histórico longo, análise financeira |
| MODIS | 250-1000 m | Diário | 2000-presente | Tempo real, queimadas, vegetação global |
| Sentinel-1 (SAR) | 10 m | 6-12 dias | 2014-presente | Nuvens, umidade solo, deformação |
| SRTM/GEBCO | 30 m / 15 arc-sec | Estático | 2000 | Elevação, batimetria, análise topográfica |
⚙️ Fluxo de Processamento Típico
- Define geometria (ponto, linha, polígono, retângulo)
- Especifica período de interesse (datas início/fim)
- Filtra dataset (nuvens, qualidade, bandas)
- Aplica transformações (cálculos, índices)
- Reduz dimensionalidade (estatísticas, agregação)
- Exporta ou visualiza resultado
2. Configuração Inicial: Do Zero até Primeiro Script
2.1 Registro e Aprovação (5-48 horas)
Passo a Passo:
- Acesse
https://earthengine.google.com/ - Clique em "Sign Up" (verde no canto superior)
- Faça login com conta Google (crie uma se necessário)
- Preencha formulário:
Name: seu nome completo (verificável)Institution: empresa, universidade ou "Independent Researcher"Purpose: escolha entre pesquisa, agricultura, mudanças climáticas, educação, etc.Country: seu país de residência
- Aceite termos de serviço
- Aguarde email de aprovação (geralmente 24-48 horas)
2.2 Interface do Code Editor (Dissecação Técnica)
O Code Editor tem 3 painéis principais:
🔍 Painel Esquerdo
Funções:
Scripts: sua biblioteca de códigoDocs: documentação oficial (crucial)Inspector: examina pixels individuaisAssets: armazena dados pessoais
✏️ Painel Central
Funções:
- Editor JavaScript
- Executa código via botão [Run] azul
- Atalho:
Ctrl+Enter(Windows) /Cmd+Enter(Mac) - Histórico automático de versões
🗺️ Painel Direito
Funções:
- Visualização de mapas
- Zoom/pan com mouse
- Toggle entre Satellite/Map
- Exibe camadas (layers)
2.3 Seu Primeiro Script: NDVI em 3 Minutos
Cole este código exatamente no editor central:
// PRIMEIRO SCRIPT: NDVI de São Paulo (2024)
// 1. Define região de interesse
var regiao = ee.Geometry.Rectangle([-47.5, -23.8, -46.0, -23.2]);
// 2. Carrega Sentinel-2 (imagens públicas)
var sentinel = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(regiao) // Apenas a região
.filterDate('2024-01-01', '2024-03-31') // Período
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)); // <20% nuvem
// 3. Seleciona imagem com menos nuvens
var imagem = sentinel.first();
// 4. Calcula NDVI (fórmula: (NIR - Red) / (NIR + Red))
var ndvi = imagem.normalizedDifference(['B8', 'B4']);
// 5. Exibe no mapa com cores
Map.addLayer(
ndvi,
{min: -1, max: 1, palette: ['red', 'yellow', 'green']},
'NDVI São Paulo'
);
// 6. Centraliza mapa
Map.centerObject(regiao, 10);
// 7. Mostra estatísticas
print('NDVI Mínimo:', ndvi.reduceRegion(ee.Reducer.min(), regiao, 30).get('B8'));
print('NDVI Máximo:', ndvi.reduceRegion(ee.Reducer.max(), regiao, 30).get('B8'));
print('NDVI Média:', ndvi.reduceRegion(ee.Reducer.mean(), regiao, 30).get('B8'));
O que fazer agora:
- Copie o código acima
- Cole no editor central (substitua qualquer código existente)
- Clique no botão azul [Run]
- Aguarde 5-15 segundos
- Veja o mapa colorido aparecer à direita
- Verifique o Console (inferior esquerdo) para estatísticas
3. Interpretação Técnica: Bandas Espectrais e Índices
3.1 Fundamento Físico das Bandas
Satélites não tiram fotos coloridas. Eles medem radiância em diferentes comprimentos de onda.
Analogia: Seu olho vê 3 canais (vermelho, verde, azul). Satélites veem 11-13 canais, incluindo invisíveis ao olho humano (infravermelho térmico, ultravioleta).
3.2 Bandas Sentinel-2: Referência Técnica Completa
| Banda | Nome | λ (nm) | Res. | Função | Aplicação |
|---|---|---|---|---|---|
B1 |
Coastal Aerosol | 443 | 60 m | Aerossóis costeiros | Qualidade água, atmosfera |
B2 |
Blue | 490 | 10 m | Penetração água | Batimetria, qualidade água |
B3 |
Green | 560 | 10 m | Pico clorofila | Vigor vegetação |
B4 |
Red | 665 | 10 m | Absorção clorofila | Diferença solo/veg |
B5 |
Red Edge 1 | 705 | 20 m | Mudança abrupta reflectância | Estresse vegetação (avançado) |
B6 |
Red Edge 2 | 740 | 20 m | id. | id. |
B7 |
Red Edge 3 | 783 | 20 m | id. | id. |
B8 |
NIR (Infravermelho Próximo) | 842 | 10 m | Máxima reflectância vegetação | NDVI, vigor, biomassa |
B8A |
Narrow NIR | 865 | 20 m | NIR restrito | Análises especializadas |
B11 |
SWIR 1 | 1610 | 20 m | Umidade, solo, vegetação | NDBI, NDWI, geologia |
B12 |
SWIR 2 | 2190 | 20 m | Assinatura mineral | Geologia, classificação |
3.3 Equações dos Principais Índices
NDVI - Normalized Difference Vegetation Index
NDVI = (NIR - RED) / (NIR + RED)
= (B8 - B4) / (B8 + B4)
Interpretação:
- NDVI ~ 1: Vegetação densa, saudável
- NDVI ~ 0: Solo exposto, transição
- NDVI ~ -1: Água, nuvem, asfalto
Faixa típica em terra: -0.3 a 0.8 (valores < 0 = água/nuvem)
EVI - Enhanced Vegetation Index
EVI = 2.5 * ((NIR - RED) / (NIR + 6*RED - 7.5*BLUE + 1))
= 2.5 * ((B8 - B4) / (B8 + 6*B4 - 7.5*B2 + 1))
Diferença para NDVI: Mais sensível a variações em áreas com alta vegetação
NDBI - Normalized Difference Built-up Index
NDBI = (SWIR1 - NIR) / (SWIR1 + NIR)
= (B11 - B8) / (B11 + B8)
Uso: Detecta áreas urbanas, concreto, asfalto
Valor alto: Áreas construídas | Valor baixo: Vegetação
NDWI - Normalized Difference Water Index
NDWI = (NIR - SWIR1) / (NIR + SWIR1)
= (B8 - B11) / (B8 + B11)
Uso: Detecta água, umidade do solo
Valor alto: Água, umidade | Valor baixo: Seco
4. Scripts Práticos Avançados para Casos Reais
4.1 Script Completo: Análise Multi-Índice com Exportação
// ANÁLISE COMPLETA DE COBERTURA DO SOLO 2024
// Uso: Diagnóstico de propriedade, validação CAR, relatórios ambientais
// ===== CONFIGURAÇÕES =====
var regiao = ee.Geometry.Rectangle([-57.2, -14.8, -56.8, -14.4]); // Mato Grosso
var ano = 2024;
// ===== CARREGAR DADOS SENTINEL-2 =====
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(regiao)
.filterDate(ano + '-01-01', ano + '-12-31')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 15))
.map(function(image) {
// Remover nuvens via máscara
var scl = image.select('SCL');
var mask = scl.eq(3).or(scl.eq(8)).or(scl.eq(9)); // 3=cloud, 8=high cloud, 9=cirrus
return image.updateMask(mask.not());
});
// Imagem mediana anual (reduz ruído)
var imagemAnual = s2.median();
// ===== CALCULAR ÍNDICES =====
var ndvi = imagemAnual.normalizedDifference(['B8', 'B4']).rename('NDVI');
var evi = imagemAnual.expression(
'2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))',
{
'NIR': imagemAnual.select('B8'),
'RED': imagemAnual.select('B4'),
'BLUE': imagemAnual.select('B2')
}
).rename('EVI');
var ndbi = imagemAnual.normalizedDifference(['B11', 'B8']).rename('NDBI');
var ndwi = imagemAnual.normalizedDifference(['B8', 'B11']).rename('NDWI');
var bsi = imagemAnual.expression(
'((SWIR + RED) - (NIR + BLUE)) / ((SWIR + RED) + (NIR + BLUE))',
{
'SWIR': imagemAnual.select('B11'),
'RED': imagemAnual.select('B4'),
'NIR': imagemAnual.select('B8'),
'BLUE': imagemAnual.select('B2')
}
).rename('BSI');
// ===== CLASSIFICAÇÃO SUPERVISIONADA (MANUAL) =====
var floresta = ndvi.gt(0.6).and(ndwi.lt(0.3));
var agricola = ndvi.gt(0.4).and(ndvi.lte(0.6));
var pastagem = ndvi.gt(0.2).and(ndvi.lte(0.4));
var urbano = ndbi.gt(0.1);
var agua = ndwi.gt(0.4);
var classificacao = ee.Image(0)
.where(agua, 1) // Azul: água
.where(urbano, 2) // Cinza: urbano
.where(floresta, 3) // Verde escuro: floresta
.where(agricola, 4) // Verde médio: agrícola
.where(pastagem, 5); // Verde claro: pastagem
// ===== CALCULAR ÁREAS =====
function calcularArea(imagem, valor) {
var mascara = imagem.eq(valor);
return mascara.multiply(ee.Image.pixelArea())
.reduceRegion({
reducer: ee.Reducer.sum(),
geometry: regiao,
scale: 10
}).get('constant');
}
var areaAgua = ee.Number(calcularArea(classificacao, 1)).divide(10000); // hectares
var areaUrbano = ee.Number(calcularArea(classificacao, 2)).divide(10000);
var areaFloresta = ee.Number(calcularArea(classificacao, 3)).divide(10000);
var areaAgricola = ee.Number(calcularArea(classificacao, 4)).divide(10000);
var areaPastagem = ee.Number(calcularArea(classificacao, 5)).divide(10000);
// ===== EXIBIR NO MAPA =====
var paletaClassificacao = ['blue', 'gray', 'darkgreen', 'limegreen', 'yellow'];
Map.addLayer(
classificacao,
{min: 0, max: 5, palette: paletaClassificacao},
'Classificação Cobertura Solo'
);
Map.addLayer(
ndvi,
{min: -1, max: 1, palette: ['red', 'yellow', 'green']},
'NDVI',
false // oculto por padrão
);
Map.centerObject(regiao, 11);
// ===== RELATÓRIO CONSOLE =====
print('==== RELATÓRIO COBERTURA DO SOLO 2024 ====');
print('Propriedade:', regiao.bounds());
print('');
print('ÁREAS CALCULADAS:');
print('├─ Água:', areaAgua.round(), 'hectares');
print('├─ Urbano:', areaUrbano.round(), 'hectares');
print('├─ Floresta:', areaFloresta.round(), 'hectares');
print('├─ Agrícola:', areaAgricola.round(), 'hectares');
print('└─ Pastagem:', areaPastagem.round(), 'hectares');
print('');
var areaTotal = areaAgua.add(areaUrbano).add(areaFloresta).add(areaAgricola).add(areaPastagem);
print('PERCENTUAIS:');
print('├─ Floresta:', areaFloresta.divide(areaTotal).multiply(100).round().getInfo() + '%');
print('├─ Agrícola:', areaAgricola.divide(areaTotal).multiply(100).round().getInfo() + '%');
print('├─ Pastagem:', areaPastagem.divide(areaTotal).multiply(100).round().getInfo() + '%');
print('└─ Urbano:', areaUrbano.divide(areaTotal).multiply(100).round().getInfo() + '%');
// ===== EXPORTAR PARA GOOGLE DRIVE =====
Export.image.toDrive({
image: classificacao.uint8(),
description: 'Classificacao_CoberturaSolo_2024',
scale: 10,
region: regiao,
maxPixels: 1e13,
fileFormat: 'GeoTIFF'
});
4.2 Script 2: Monitoramento Temporal (Série 2019-2024)
// DETECTAR MUDANÇAS MULTI-TEMPORAIS
// Uso: Validação de desmatamento, análise de recuperação
var regiao = ee.Geometry.Rectangle([-60.5, -5.5, -59.5, -4.5]); // Amazônia
// Função para calcular NDVI de um ano inteiro
function ndviAnual(ano) {
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(regiao)
.filterDate(ano + '-06-01', ano + '-09-30') // Estação seca
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.map(function(img) {
var scl = img.select('SCL');
var mask = scl.gt(3).and(scl.lt(8));
return img.updateMask(mask);
});
return s2.median()
.normalizedDifference(['B8', 'B4'])
.rename('NDVI_' + ano);
}
// Coletar NDVI para 5 anos
var anos = [2019, 2020, 2021, 2022, 2023, 2024];
var ndviStack = ee.Image.cat(anos.map(ndviAnual));
// Detectar floresta (NDVI > 0.6)
var florestas = ee.Image.cat(anos.map(function(ano) {
return ndviStack.select('NDVI_' + ano).gt(0.6).rename('Floresta_' + ano);
}));
// Desmatamento: perda de floresta entre 2019 e 2024
var desmatamento = florestas.select('Floresta_2019')
.and(florestas.select('Floresta_2024').not())
.rename('Desmatamento');
// Recuperação: ganho de floresta
var recuperacao = florestas.select('Floresta_2019').not()
.and(florestas.select('Floresta_2024'))
.rename('Recuperacao');
// Visualizar
Map.addLayer(
desmatamento,
{palette: ['white', 'red']},
'Desmatamento 2019-2024'
);
Map.addLayer(
recuperacao,
{palette: ['white', 'green']},
'Recuperação 2019-2024',
false
);
// Calcular áreas
var areaDesmatada = desmatamento.multiply(ee.Image.pixelArea())
.reduceRegion({reducer: ee.Reducer.sum(), geometry: regiao, scale: 10})
.get('Desmatamento');
var areaRecuperada = recuperacao.multiply(ee.Image.pixelArea())
.reduceRegion({reducer: ee.Reducer.sum(), geometry: regiao, scale: 10})
.get('Recuperacao');
print('Desmatamento 2019-2024:', ee.Number(areaDesmatada).divide(10000).round(), 'hectares');
print('Recuperação 2019-2024:', ee.Number(areaRecuperada).divide(10000).round(), 'hectares');
5. Erros Técnicos Comuns e Soluções
5.1 Erro: "Image.normalizedDifference() requires 2 bands"
Error: Image.normalizedDifference() requires 2 bands
Causa: Banda especificada não existe ou nome está errado.
Diagnóstico:
// Verificar quais bandas existem
var imagem = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED').first();
print('Bandas disponíveis:', imagem.bandNames());
Solução Correta:
// ❌ ERRADO - Banda B7 não existe em Sentinel-2
var ndvi = imagem.normalizedDifference(['B7', 'B3']);
// ✅ CORRETO - Bandas reais
var ndvi = imagem.normalizedDifference(['B8', 'B4']);
5.2 Erro: "No Matching Bands" Entre Datasets
Diferentes satélites usam nomes diferentes para bandas similares:
| Índice | Sentinel-2 | Landsat 8/9 | MODIS |
|---|---|---|---|
| NDVI | B8, B4 | B5, B4 | sur_refl_b02, sur_refl_b01 |
| NDBI | B11, B8 | B6, B5 | sur_refl_b06, sur_refl_b02 |
| NDWI | B8, B11 | B5, B6 | não possui |
Solução: Sempre documentar qual satélite está usando e padronizar nomes:
// Solução: Função genérica
function calcularNDVI(imageCollection, satellite) {
if (satellite === 'S2') {
return imageCollection.map(function(img) {
return img.normalizedDifference(['B8', 'B4']).rename('NDVI');
});
} else if (satellite === 'L8') {
return imageCollection.map(function(img) {
return img.normalizedDifference(['B5', 'B4']).rename('NDVI');
});
}
}
var ndviSentinel = calcularNDVI(imagemSentinel, 'S2');
var ndviLandsat = calcularNDVI(imagemLandsat, 'L8');
5.3 Erro: "Too Many Requests" ou Timeout
Causa: Processando área muito grande em resolução muito alta.
Solução: Reduzir resolução para testar, depois aumentar:
// ❌ PROBLEMA: Brasil em 10 metros = 17 BILHÕES de pixels
var brasil = ee.Geometry.Rectangle([-74, -34, -28, 5]);
var analise = imagem.reduceRegion({scale: 10}); // TIMEOUT
// ✅ SOLUÇÃO 1: Aumentar escala
.reduceRegion({scale: 1000}); // 1 km, viável para área grande
// ✅ SOLUÇÃO 2: Reduzir área
var estado = ee.Geometry.Rectangle([-57, -14, -56, -13]); // Mato Grosso
.reduceRegion({scale: 10}); // 10 m, viável para estado
// ✅ SOLUÇÃO 3: Usar .sample() em vez de .reduceRegion()
imagem.sample({
geometry: brasil,
scale: 100,
numPixels: 10000 // Apenas 10k amostras aleatórias
});
5.4 Erro: "Maximum Memory Exceeded"
Causa: Tentou criar imagem stack muito grande ou fazer operação complexa.
// ❌ PROBLEMA: Empilhar 12 bandas x 12 meses = 144 bandas
var stack = imagemMeses.toBands(); // ERRO de memória
// ✅ SOLUÇÃO 1: Processar mês a mês
imagemMeses.map(function(img) {
return img.normalizedDifference(['B8', 'B4']);
});
// ✅ SOLUÇÃO 2: Usar image collection em vez de stack
var ndviColecao = imagemMeses.map(function(img) {
return img.normalizedDifference(['B8', 'B4']);
});
// Depois reduzir (média, máximo, etc)
var ndviMedia = ndviColecao.mean();
6. Análise Comparativa: Qual Satélite Escolher?
6.1 Sentinel-2 vs Landsat 8/9: Tabela Técnica Detalhada
| Critério Técnico | Sentinel-2 | Landsat 8/9 | Recomendação |
|---|---|---|---|
| Resolução Melhor | 10 m (B2,3,4,8) | 15-30 m (B2-5, B6-7) | S2 para detalhe; L8 para cobertura |
| Frequência Revisita | 5 dias (2 satélites) | 16 dias (2 satélites) | S2 para mudanças rápidas |
| Bandas Espectrais | 11 bandas + QA | 11 bandas (OLI) | Equivalentes, S2 tem Red Edge |
| Serie Temporal | 2015-presente | 1984-presente (L5,7), 2013-presente (L8+) | L8 para análise histórica |
| Nível Processamento | L2A (bottom-of-atmosphere) | L2 (surface reflectance) | Ambas usáveis diretamente |
| Cobertura Nuvem | Variável (5% tropical) | Variável (7% tropical) | S2 melhor por frequência |
| Custo | Gratuito (100%) | Gratuito (100%) | Iguais |
6.2 MODIS vs Sentinel-2: Análise de Tradeoffs
🛰️ MODIS
🎯 Sentinel-2
📊 Matriz de Decisão
| Caso de Uso | Melhor Escolha | Razão |
|---|---|---|
| Monitoramento de desmatamento | S2 + L8 | Combinação de frequência (S2) com histórico (L8) |
| Detecção de queimadas em tempo real | MODIS + S2 | MODIS para alerta, S2 para detalhe |
| Análise de tendência 20+ anos | Landsat | Dados desde 1984 |
| Classificação de uso do solo precisa | Sentinel-2 | Resolução e bandas espectrais |
| Validação de créditos de carbono (MRV) | S2 + L8 | Precisão + histórico comprovável |
| Estimativa de produtividade agrícola | Sentinel-2 | Temporal precisão, índices avançados |
7. Aplicações Profissionais Documentadas (2024-2026)
7.1 Caso 1: Validação de Créditos de Carbono REDD+
Contexto: Empresa operando projeto de redução de desmatamento em Mato Grosso precisa validar MRV (Monitoramento, Relatório e Verificação) para venda de créditos.
Workflow GEE Implementado:
// VALIDAÇÃO MRV - CRÉDITOS DE CARBONO
var propriedade = ee.FeatureCollection('assets/propriedade-redd');
var boundary = propriedade.geometry();
// ===== BASELINE (Ano de referência: 2012) =====
var baseline2012 = ee.ImageCollection('LANDSAT/LC08_C02_T1_L2')
.filterBounds(boundary)
.filterDate('2012-01-01', '2012-12-31')
.filter(ee.Filter.lt('CLOUD_COVER', 20))
.median()
.normalizedDifference(['B5', 'B4']) // B5=NIR, B4=RED para Landsat
.gt(0.6) // Floresta se NDVI > 0.6
.rename('Floresta');
var areaFlorestaBaseline = baseline2012.multiply(ee.Image.pixelArea())
.reduceRegion({
reducer: ee.Reducer.sum(),
geometry: boundary,
scale: 30
}).get('Floresta');
// ===== MONITORAMENTO (Anos 2023-2024) =====
function calcularFlorestaAno(ano) {
return ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(boundary)
.filterDate(ano + '-01-01', ano + '-12-31')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 15))
.median()
.normalizedDifference(['B8', 'B4'])
.gt(0.6)
.rename('Floresta_' + ano);
}
var floresta2023 = calcularFlorestaAno(2023);
var floresta2024 = calcularFlorestaAno(2024);
// ===== CALCULAR CONSERVAÇÃO =====
var conservacao2024 = floresta2023.and(floresta2024); // Mantém floresta ambos anos
var areaConservada = conservacao2024.multiply(ee.Image.pixelArea())
.reduceRegion({
reducer: ee.Reducer.sum(),
geometry: boundary,
scale: 10
}).get('constant');
var hectaresConservados = ee.Number(areaConservada)
.divide(10000) // m² para hectares
.subtract(ee.Number(areaFlorestaBaseline).divide(10000));
// ===== CÁLCULO DE CRÉDITOS =====
// Abordagem simples: 5.2 tC/ha/ano (média para Amazônia)
var fatorEmissao = 5.2; // tC/hectare/ano
var anosMonitoramento = 2; // 2023-2024
var creditosGerados = hectaresConservados.multiply(fatorEmissao).multiply(anosMonitoramento);
// ===== RELATÓRIO MRV =====
print('═══════════════════════════════════════');
print('RELATÓRIO MRV - VALIDAÇÃO CARBONO');
print('═══════════════════════════════════════');
print('');
print('DADOS BASELINE (2012):');
print('Área floresta baseline:', areaFlorestaBaseline.divide(10000).round(), 'ha');
print('');
print('MONITORAMENTO 2024:');
print('Área conservada 2023-2024:', hectaresConservados.round(), 'ha');
print('');
print('CRÉDITOS DE CARBONO GERADOS:');
print('Fator emissão: ' + fatorEmissao + ' tC/ha/ano');
print('Período: ' + anosMonitoramento + ' anos');
print('Total créditos (tCO₂e):', creditosGerados.round().getInfo());
print('');
print('CERTIFICAÇÃO:');
print('✓ Metodologia: VCS/CCB Standards');
print('✓ Validação: Imagens satélite públicas');
print('✓ Verificação: Baseada em dados geoespaciais');
7.2 Caso 2: Levantamento CAR Automatizado
Contexto: Produtor rural precisa documentar uso do solo para Cadastro Ambiental Rural (CAR) com imagens satélite.
Saída esperada: Relatório técnico com áreas de floresta, cerrado, agricultura e pastagem.
Fluxo de Trabalho Automatizado
- Upload de shapefile da propriedade
- Processamento Sentinel-2 anual
- Classificação automática em 4 classes
- Cálculo de áreas
- Exportação de mapa + tabela CSV
- Relatório pronto para envio ao órgão ambiental
7.3 Caso 3: Risk Assessment para Instituição Financeira
Contexto: Banco precisa avaliar risco ambiental antes de emprestar R$ 50 milhões para empresa agrícola.
Análise GEE realizada:
- ✓ Verificação de desmatamento nos últimos 5 anos
- ✓ Comparação com áreas de proteção legal
- ✓ Análise de tendências (aumentando/diminuindo desmatamento?)
- ✓ Score de risco ambiental (0-100)
8. Técnicas Avançadas para Profissionais
8.1 Importar Dados Vetoriais (Shapefile em Assets)
Passo 1: Preparar arquivo
- Ter shapefile completo (.shp + .dbf + .shx + .prj)
- Reprojeta para WGS84 (EPSG:4326) se necessário
- Zippar os 4 arquivos
Passo 2: Upload no GEE
// No Code Editor:
// 1. Clique em "Assets" (painel esquerdo)
// 2. Clique em "NEW" > "Upload Table"
// 3. Selecione zip do shapefile
// 4. Aguarde processamento (5-30 minutos)
Passo 3: Usar no script
// Substitua o caminho com seu asset
var propriedade = ee.FeatureCollection('projects/SEU_USUARIO/assets/sua-propriedade');
// Agora use como geometria
var analise = imagem.reduceRegion({
geometry: propriedade.geometry(),
scale: 10
});
// Visualizar
Map.addLayer(propriedade, {color: 'white'}, 'Limite Propriedade');
8.2 Exportar Dados para Google Drive (Workflow Completo)
// Exportar imagem como GeoTIFF
Export.image.toDrive({
image: ndvi,
description: 'NDVI_Propriedade_2024',
scale: 10,
region: propriedade,
fileFormat: 'GeoTIFF',
maxPixels: 1e13
});
// Exportar tabela de estatísticas como CSV
var tabela = ee.FeatureCollection([
ee.Feature(null, {
'propriedade': 'Fazenda ABC',
'area_hectares': 1500,
'ndvi_media': 0.65,
'floresta_pct': 35
})
]);
Export.table.toDrive({
collection: tabela,
description: 'Estatisticas_2024',
fileFormat: 'CSV'
});
// Após clicar "Run":
// 1. Acesse aba "Tasks" (canto superior direito)
// 2. Clique botão azul "RUN" em cada tarefa
// 3. Aguarde sincronização com Google Drive
// 4. Verifique Google Drive > Pasta "Earth Engine Exports"
8.3 Machine Learning: Classificação com RF (Random Forest)
// CLASSIFICAÇÃO COM MACHINE LEARNING
// Pré-requisito: amostras de treinamento como asset GeoJSON
var amostrasFlorestas = ee.FeatureCollection('projects/seu/assets/amostras-floresta');
var amostrasPastagem = ee.FeatureCollection('projects/seu/assets/amostras-pastagem');
var amostrasUrbano = ee.FeatureCollection('projects/seu/assets/amostras-urbano');
// Combinar amostras com labels
var amostrasFlorestas = amostrasFlorestas.map(function(f) {
return f.set('classe', 1); // 1 = floresta
});
var amostrasPastagem = amostrasPastagem.map(function(f) {
return f.set('classe', 2); // 2 = pastagem
});
var amostrasUrbano = amostrasUrbano.map(function(f) {
return f.set('classe', 3); // 3 = urbano
});
var amostrasTotais = amostrasFlorestas
.merge(amostrasPastagem)
.merge(amostrasUrbano);
// Preparar features para classificador
var banda = imagem.select(['B2', 'B3', 'B4', 'B8', 'B11', 'B12']);
var samples = banda.sampleRectangles({
collection: amostrasTotais,
scale: 10,
geometries: true
});
// Treinar classificador Random Forest
var classificador = ee.Classifier.smileRandomForest(100)
.train({
features: samples,
classProperty: 'classe',
inputProperties: banda.bandNames()
});
// Aplicar classificador
var classificacaoML = imagem.classify(classificador);
// Validação com matriz de confusão (opcional)
var validation = samples.classify(classificador);
var confusionMatrix = validation.errorMatrix('classe', 'classification');
print('Acurácia geral:', confusionMatrix.accuracy());
9. Perguntas Frequentes (FAQ) Técnico
❓ P: Qual a diferença entre GEE e Google Earth?
R: Google Earth é um visualizador de mapas 3D. GEE é uma plataforma de computação. Analogia: Google Earth = assistir TV, GEE = produzir análises científicas.
❓ P: Posso usar GEE comercialmente?
R: Sim, para fins não-comerciais é gratuito. Para uso comercial (vender análises, consultoria), negocie com Google Cloud. Valor típico: US$2.5-5k/mês dependendo volume.
❓ P: Dados satélite do GEE são de domínio público?
R: Maioria sim (Sentinel-2, Landsat, MODIS). Verifique licença específica antes de usar comercialmente. Sentinel-2 = CC-BY-4.0 (livre para tudo). Landsat = Domínio público US.
❓ P: Qual resolução é adequada para minha análise?
R: Depende do objeto:
- 30-100m: Biomas, estados, continentes
- 10-30m: Cidades, propriedades grandes
- <5m: Objetos pequenos (requer satélites comerciais, não GEE)
❓ P: Como lidar com muitas nuvens em região tropical?
R: Estratégias:
- Aumentar período temporal (3-6 meses em vez de 1 mês)
- Usar
.median()em vez de.first() - Aumentar tolerância nuvem:
CLOUDY_PIXEL_PERCENTAGE: 50 - Usar SAR (Sentinel-1) que penetra nuvens
❓ P: GEE pode falhar ou ser descontinuado?
R: Improvável. GEE é:
- Parte do Google Cloud (fonte de receita)
- Usado por Banco Mundial, ONU, grandes ONGs
- 20+ anos de pesquisa Google por trás
- Melhor alternativa disponível em 2026
Precaução: Sempre exporte dados críticos para backup local.
Conclusão: Você é Agora Usuário Avançado de GEE
Este artigo cobriu 9 tópicos que transformam você de iniciante para profissional em geotecnologia:
✓ Você Aprendeu:
- Arquitetura técnica e fluxo interno do GEE
- Física de sensoriamento remoto (bandas espectrais)
- 3+ scripts prontos para casos reais
- Interpretação de NDVI, EVI, NDBI, NDWI
- Comparações técnicas entre satélites
- Aplicações profissionais documentadas
- Erros comuns e soluções específicas
- Técnicas avançadas (ML, exportação, assets)
📋 Próximos Passos Imediatos
| Período | Ação | Tempo |
|---|---|---|
| Hoje | Inscrever-se no GEE + aproveitar aprovação | 5 min |
| Amanhã | Executar Script 1 (NDVI básico) com sua região | 15 min |
| Esta semana | Dominar Script 2 (desmatamento) e exportar dados | 2-3 h |
| Este mês | Importar shapefile próprio, gerar relatório completo | 4-6 h |
| Este trimestre | Implementar ML (classificação), validar com dados reais | 20-30 h |
🎓 Recursos para Aprofundamento
- Documentação Oficial: https://developers.google.com/earth-engine/docs
- Code Examples: https://code.earthengine.google.com (35+ scripts exemplo)
- Fórum Comunidade: https://groups.google.com/forum/#!forum/google-earth-engine-developers
- YouTube: "Google Earth Engine Tutorials" - 100+ horas de conteúdo
- Artigos Científicos: Procure por "GEE" + seu caso de uso em Google Scholar
💼 Oportunidades de Carreira em 2026
Profissionais com domínio de GEE estão em alta demanda:
- ONGs Ambientais: IPAM, TNC, WWF - salário R$ 5-8k/mês
- Agro Tech: Startup de agricultura de precisão - R$ 8-12k/mês
- Consultoria Ambiental: Auditoria, validação MRV - R$ 4-10k/projeto
- Governo: INPE, ministérios - R$ 6-10k/mês
- Freelancer:**qualquer um dos acima, com autonomia

Comentários