Google Earth Engine: A Referência Técnica Aprofundada

Google Earth Engine 2026: Guia Premium Aprofundado
📡 GUIA PREMIUM 2026

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.

2.3
Petabytes de dados
50M+
Imagens de satélite
99%
Cobertura global
$0
Custo para pesquisa

1. Conceitos Fundamentais: O Que É Google Earth Engine?

Nota Técnica: Google Earth Engine é a plataforma de computação geoespacial mais poderosa disponível atualmente em 2026, processando exabytes de dados em segundos.

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
Insight Técnico: O GEE usa lazy evaluation – você escreve o código, Google otimiza e calcula apenas quando necessário. Isso permite processar petabytes de dados sem engargalos.

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

  1. Define geometria (ponto, linha, polígono, retângulo)
  2. Especifica período de interesse (datas início/fim)
  3. Filtra dataset (nuvens, qualidade, bandas)
  4. Aplica transformações (cálculos, índices)
  5. Reduz dimensionalidade (estatísticas, agregação)
  6. Exporta ou visualiza resultado

2. Configuração Inicial: Do Zero até Primeiro Script

2.1 Registro e Aprovação (5-48 horas)

Importante: O Google aprova contas baseado em uso pretendido. Seja específico e honesto no formulário.

Passo a Passo:

  1. Acesse https://earthengine.google.com/
  2. Clique em "Sign Up" (verde no canto superior)
  3. Faça login com conta Google (crie uma se necessário)
  4. 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
  5. Aceite termos de serviço
  6. Aguarde email de aprovação (geralmente 24-48 horas)
✓ Quando aprovado: Você receberá email com link para "Code Editor". Salve esse link.

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ódigo
  • Docs: documentação oficial (crucial)
  • Inspector: examina pixels individuais
  • Assets: 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:

  1. Copie o código acima
  2. Cole no editor central (substitua qualquer código existente)
  3. Clique no botão azul [Run]
  4. Aguarde 5-15 segundos
  5. Veja o mapa colorido aparecer à direita
  6. Verifique o Console (inferior esquerdo) para estatísticas
✓ Sucesso! Se vir um mapa com cores (vermelho/amarelo/verde), você executou seu primeiro processamento geoespacial em escala. Parabéns!

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

Insight Técnico: A escolha de bandas não é arbitrária. Cada índice aproveita as propriedades físicas dos materiais. Vegetação reflete muito NIR (espaço entre células) e absorve Red (fotossíntese). Água absorve ambos.

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"

Mensagem de Erro: 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

Cobertura global diária
Detecção tempo real (queimadas)
Series de 20+ anos
Resolução baixa (250-1000m)
Menos bandas espectrais
Pixels grandes = incerteza posicional

🎯 Sentinel-2

Resolução alta (10m)
11 bandas (mais índices possíveis)
Revisita frequente (5 dias)
Não é diário
Série temporal curta (2015+)
Processamento mais lento para grandes áreas

📊 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

  1. Upload de shapefile da propriedade
  2. Processamento Sentinel-2 anual
  3. Classificação automática em 4 classes
  4. Cálculo de áreas
  5. Exportação de mapa + tabela CSV
  6. 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)
Resultado: Empresa com desmatamento > 100 ha/ano = ALTO RISCO = Empréstimo negado ou com 5% juros adicionais.

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());
Nota: ML em GEE é tópico avançado. Requer conhecimento de: coleta de amostras, validação cruzada, métricas de erro.

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:

  1. Aumentar período temporal (3-6 meses em vez de 1 mês)
  2. Usar .median() em vez de .first()
  3. Aumentar tolerância nuvem: CLOUDY_PIXEL_PERCENTAGE: 50
  4. 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

Google Earth Engine: Guia Premium Aprofundado 2026

Última atualização: Maio 2026 | Próxima revisão: Dezembro 2026

Este artigo é um recurso vivo. Atualizações serão feitas conforme GEE evoluir.

© 2026 | Licença CC-BY-NC (Use livremente com atribuição, não comercial)

Comentários