GEE Avançado: Como Exportar Imagens e Dados para o Google Drive

GEE Avançado: Como Exportar Imagens e Dados para o Google Drive

Exportar dados do Google Earth Engine parece simples até você deparar com um job que falha silenciosamente, um GeoTIFF fragmentado em dezenas de tiles sem alinhamento correto, ou uma tabela que chega ao Drive com geometrias corrompidas. Este guia cobre os mecanismos de exportação do GEE em profundidade — parâmetros críticos, armadilhas comuns e estratégias para exportações em escala.

Como o Sistema de Exportação do GEE Funciona

No GEE, toda exportação é um batch task assíncrono. Você define a tarefa no script, ela aparece na aba Tasks do Code Editor (ou é iniciada programaticamente via task.start() na API Python), e o processamento ocorre nos servidores do Google. O arquivo só aparece no Drive depois que o job completa — não há streaming em tempo real.

Existem três destinos de exportação: Google Drive, Google Cloud Storage e Earth Engine Assets. Este artigo foca no Drive, que é o fluxo mais comum em projetos de sensoriamento remoto, geotecnologia e monitoramento ambiental.

As funções principais são:

  • Export.image.toDrive() — rasters (GeoTIFF, TFRecord)
  • Export.table.toDrive() — vetores e tabelas (CSV, SHP, GeoJSON, KML, KMZ)
  • Export.video.toDrive() — ImageCollections como vídeo

Export.image.toDrive: Parâmetros que Realmente Importam

Os parâmetros crsTransform, scale e dimensions são mutuamente exclusivos — não podem ser usados juntos na mesma tarefa de exportação.Este é um dos erros mais comuns de quem migra de workflows simples para exportações controladas.

scale vs. crsTransform

O parâmetro scale define o tamanho do pixel em metros (ou nas unidades do CRS de destino) e deixa o GEE decidir o alinhamento do grid. Já o crsTransform dá controle total sobre a origem e o tamanho do pixel, garantindo alinhamento perfeito com outra camada.

O crsTransform é definido como um array de seis valores — por exemplo [30, 0, -2493045, 0, -30, 3310005] — e pode ser obtido diretamente de uma imagem existente via print(image.projection()).Isso é essencial quando você precisa que o output seja pixel-a-pixel compatível com um dataset de referência.

maxPixels

Se a exportação tiver mais de 1e8 pixels, é necessário definir maxPixels com um valor mais alto, como 1e13.Omitir esse parâmetro é o motivo mais frequente de jobs que falham em áreas extensas.

Cloud Optimized GeoTIFF

Para exportar como Cloud Optimized GeoTIFF (COG), basta definir fileFormat: 'GeoTIFF' e passar formatOptions: { cloudOptimized: true }.COGs são diretamente relidos no GEE a partir do Cloud Storage e permitem acesso por range byte, o que reduz I/O em aplicações downstream.

Nodata

Para controlar o valor de nodata, use image.unmask({value: noDataVal, sameFootprint: false}) antes da exportação e passe o valor via formatOptions: { noData: noDataVal } (apenas para GeoTIFF).

Exemplo consolidado em JavaScript:

Export.image.toDrive({
image: minhaImagem,
description: 'ndvi_amazonia_2024',
folder: 'gee_exports',
region: aoi,
crs: 'EPSG:4674',
crsTransform: [30, 0, 300000, 0, -30, 10000000],
maxPixels: 1e13,
fileFormat: 'GeoTIFF',
formatOptions: { cloudOptimized: true }
});

Exportação de Tabelas: Export.table.toDrive

A função Export.table.toDrive cria uma tarefa batch para exportar uma FeatureCollection como tabela. Os formatos suportados são CSV (padrão), GeoJSON, KML, KMZ, SHP e TFRecord.

O parâmetro selectors permite exportar apenas colunas específicas, o que é crítico para controlar o tamanho do output e evitar que atributos desnecessários poluam o shapefile de saída:

Export.table.toDrive({
  collection: pontosDeCampo,
  description: 'amostras_solo_csv',
  folder: 'gee_exports',
  fileFormat: 'CSV',
  selectors: ['id_parcela', 'carbono', 'argila', '.geo']
});

O seletor '.geo' inclui a geometria. Se omitido no CSV, você perde as coordenadas — detalhe que causa problemas silenciosos na análise posterior.

Exportando ImageCollections Inteiras

Não existe uma função nativa no GEE para exportação em lote de todos os itens de uma ImageCollection diretamente.A solução padrão é iterar sobre a coleção e gerar uma tarefa por imagem. Em JavaScript, isso é feito com .toList() e um loop; em Python, com a biblioteca geetools:

# Python com geetools
import geetools
tasks = geetools.batch.Export.imagecollection.toDrive(
collection=colecao,
folder='gee_exports',
region=aoi,
namePattern='{id}',
scale=10,
dataType='float',
maxPixels=int(1e13)
)

Após a exportação para o Drive, a biblioteca PyDrive2 pode ser usada para automatizar o download dos arquivos para um diretório local — especialmente útil quando as imagens estão salvas no Drive de uma service account.

Exportações Grandes: Estratégia de Tiling

Para exportações de imagens em escala global ou de países inteiros em alta resolução, o job pode levar horas — ou até dias. A prática recomendada é dividir a imagem em tiles menores e exportar cada tile em uma tarefa separada.

O conceito-chave é o uso do crsTransform para garantir que cada tile individual esteja no mesmo grid de pixels, evitando gaps ou sobreposições ao mosaicá-los.Tiles gerados sem esse cuidado produzem artefatos de alinhamento que inviabilizam análises posteriores.

O fluxo típico: criar um grid de polígonos sobre a AOI, filtrar os tiles que intersectam a área de interesse, e gerar uma tarefa por tile com o mesmo crsTransform base:

# Python - exportação em tiles alinhados
for i, tile_id in enumerate(tile_ids):
feature = ee.Feature(filtered_grid.toList(1, i).get(0))
geometry = feature.geometry()
task = ee.batch.Export.image.toDrive(**{
'image': exportImage,
'description': f'tile_{tile_id}',
'folder': 'gee_exports',
'crs': 'EPSG:4674',
'crsTransform': transform_base,
'region': geometry,
'maxPixels': 1e10
})
task.start()

Para datasets de imagem muito grandes, também é recomendável exportar para o Google Cloud Storage em vez do Drive, pois oferece melhor escalabilidade e confiabilidade para arquivos extensos.

Erros Comuns e Como Evitá-los

  • Exportar sem definir region: Se o parâmetro region não for especificado, os limites do mapa visível no momento em que o script é executado serão usados — o que pode gerar uma exportação inesperadamente grande se o mapa estiver com zoom afastado.
  • Misturar scale e crsTransform: causa erro imediato na criação do task. Escolha um ou outro.
  • Não aumentar maxPixels: o job falha sem mensagem clara. Para AOIs grandes, parta de 1e13.
  • Output fragmentado sem alinhamento: quando a imagem exportada é muito grande, ela é dividida em tiles automaticamente com nomenclatura baseFilename-yMin-xMin. Sem crsTransform fixo, esses tiles não se alinham perfeitamente.
  • Loop síncrono em JavaScript com .getInfo(): chamar .getInfo() dentro de um loop para gerar tarefas bloqueia o thread do Code Editor. Em Python, isso é mais controlável, mas ainda deve ser usado com moderação.
  • CRS incorreto para o contexto: exportar em EPSG:4326 (graus decimais) quando o projeto exige métrica (ex: SIRGAS 2000 / UTM) resulta em pixels com dimensões inconsistentes e erros de área em análises subsequentes.

Conclusão

A exportação no GEE é um processo mais nuançado do que parece. Dominar crsTransform, maxPixels, formatOptions e a lógica de tiling é o que separa um workflow funcional de um que falha em produção. Para projetos de sensoriamento remoto, monitoramento ambiental ou levantamentos geoespaciais em escala, esses parâmetros não são opcionais — são a diferença entre dados utilizáveis e outputs corrompidos.

FAQ

Qual a diferença entre scale e crsTransform na exportação?

scale define apenas o tamanho do pixel e deixa o GEE calcular a origem do grid livremente. crsTransform define tanto o tamanho quanto a origem do grid, garantindo alinhamento exato com outra imagem ou dataset. Para mosaicos e análises multitemporais, sempre prefira crsTransform.

Por que meu job de exportação falha sem mensagem de erro clara?

Na maioria dos casos, o motivo é o limite padrão de maxPixels (1e8). Aumente para 1e13 e verifique também se a região de exportação está corretamente definida. Se o problema persistir, inspecione o task no painel Tasks — ele mostra um log de erro ao clicar no ícone de informação.

Posso exportar uma ImageCollection inteira de uma vez?

Não nativamente. É necessário iterar sobre a coleção e criar uma tarefa por imagem. Em Python, a biblioteca geetools simplifica esse processo com geetools.batch.Export.imagecollection.toDrive(), que gera e inicia as tarefas automaticamente.

Comentários