Otimizando o tempo de execução dos scripts do Google Earth Engine
O Google Earth Engine (GEE) é uma plataforma poderosa para análise de dados geoespaciais em grande escala. No entanto, os usuários frequentemente encontram problemas com o tempo de execução, mesmo quando seus scripts parecem básicos. Um script que leva vários minutos para ser executado pode afetar a produtividade e atrasar os insights.
Neste caso, um usuário criou um script simples para processar dados do Sentinel e do Landsat 8. Apesar de sua simplicidade, o script leva cerca de 3 a 5 minutos para ser executado. Entender por que isso acontece e como otimizar o script é essencial para um processamento eficiente de dados.
O desempenho de um script GEE depende de vários fatores, incluindo tamanho dos dados, filtragem e complexidade computacional. A redução do tempo de execução envolve a identificação de gargalos no script, como operações desnecessárias ou grandes conjuntos de dados que retardam o processamento.
Este artigo explorará as possíveis causas de tempos de execução lentos no GEE e fornecerá dicas práticas para otimizar o script fornecido. Ao implementar essas estratégias, os usuários podem melhorar significativamente a velocidade e o desempenho de suas tarefas de análise de dados geoespaciais.
Comando | Exemplo de uso |
---|---|
normalizedDifference() | Esta função é usada para calcular índices como NDVI, NDWI e NDSI calculando a diferença entre duas bandas, dividida pela sua soma. É específico para análise de sensoriamento remoto onde são necessários índices de vegetação, água e neve. |
filterBounds() | Filtra uma coleção de imagens para incluir apenas imagens que cruzam uma determinada geometria. Neste caso, restringe os dados de satélite à área em torno do ponto de interesse definido, tornando o processamento mais eficiente ao excluir dados irrelevantes. |
filterDate() | Este comando limita a coleção de imagens a um intervalo de datas específico. Para o nosso problema, é crucial analisar as diferenças entre o mesmo período de tempo para os conjuntos de dados Sentinel e Landsat. |
addBands() | Adiciona novas bandas calculadas (como NDVI, NDWI e NDSI) a cada imagem da coleção. Isto é essencial para aplicar vários índices à mesma coleção de imagens sem criar conjuntos de dados separados. |
unmask() | Preenche pixels mascarados com um valor especificado. No nosso script, é utilizado para desmascarar áreas de água permanentes, garantindo que os dados são processados de forma consistente em toda a região. |
reduce() | Reduz uma coleção de imagens usando uma função redutora especificada, como ee.Reducer.percentile(). Aqui, ele é usado para calcular o percentil 30 dos valores dos pixels, otimizando a geração da imagem composta. |
clip() | Recorta uma imagem nos limites da região de interesse especificada. Isso garante que apenas os dados relevantes para a área sejam processados, o que agiliza a execução. |
gt() | Este comando significa 'maior que' e é usado para criar imagens binárias com base em um limite. Neste caso, identifica áreas com ocorrência hídrica superior a 80%. |
map() | Aplica uma função a cada imagem da coleção. Em nosso exemplo, ele aplica a função addIndices para calcular NDVI, NDWI e NDSI em todas as imagens da coleção, simplificando o fluxo de trabalho. |
Otimizando Scripts GEE para Maior Eficiência
No script fornecido, o objetivo é extrair e processar imagens de satélite de duas fontes diferentes: Sentinel e Landsat. O A plataforma permite aos usuários acessar grandes quantidades de dados de satélite e aplicar diversas operações, como filtragem, indexação e visualização. Um dos principais recursos usados neste script é o função, que é empregada para calcular índices importantes como NDVI, NDWI e NDSI. Esses índices são cruciais para analisar a vegetação, a água e a cobertura de neve na região especificada. O script começa definindo um ponto de interesse e centraliza o mapa nele usando as coordenadas fornecidas.
O script aplica vários filtros, como e , para reduzir a quantidade de dados processados, melhorando assim o tempo de execução. Por exemplo, limites de filtro() garante que apenas as imagens que cruzam a área de interesse sejam incluídas, enquanto data do filtro() limita as imagens a um intervalo de datas específico. Isto é essencial para processar grandes conjuntos de dados como imagens Sentinel e Landsat, pois minimiza a carga computacional. Além disso, o para cobertura de nuvem ajuda a descartar imagens que possuem muita nuvem, garantindo análise de melhor qualidade.
Um aspecto importante do roteiro é a função, que adiciona índices calculados (NDVI, NDWI, NDSI) às imagens, tornando-as acessíveis para análises posteriores. O roteiro também incorpora uma máscara de água permanente usando dados do conjunto de dados globais de águas superficiais do JRC. A máscara de água ajuda a excluir áreas com alta ocorrência de água (superior a 80%), o que poderia distorcer os resultados da análise de vegetação e neve. Isto é feito através do e funções, que permitem ao script isolar áreas com base em valores de pixel.
Finalmente, o script usa o função com o redutor de percentil para gerar uma imagem composta que representa o 30º percentil dos valores de pixel selecionados. Esta imagem composta é então recortada na região de interesse e visualizada no mapa usando o função. Os parâmetros visuais são definidos para os compostos Sentinel e Landsat, permitindo ao usuário visualizá-los com configurações de cores apropriadas. Ao combinar várias etapas de processamento de imagens, como filtragem, mascaramento e geração composta, este script fornece uma maneira eficiente de analisar imagens de satélite, embora uma otimização adicional possa ser aplicada para reduzir os tempos de execução.
Otimizando a execução de scripts do Google Earth Engine para processamento mais rápido
Esta solução utiliza o Google Earth Engine (GEE) com ênfase na otimização do desempenho, reduzindo o tempo de recuperação de dados e simplificando as operações. JavaScript é usado como linguagem de script.
var pointJSP = ee.Geometry.Point([86.465263, 20.168076]);
Map.centerObject(pointJSP, 14);
// Combine date variables for flexibility
var startDate = '2024-02-01';
var endDate = '2024-03-01';
// Function to add NDVI, NDWI, NDSI
var addIndices = function(image) {
var ndvi = image.normalizedDifference(['NIR', 'RED']).rename('NDVI');
var ndwi = image.normalizedDifference(['NIR', 'SWIR1']).rename('NDWI');
var ndsi = image.normalizedDifference(['SWIR1', 'SWIR2']).rename('NDSI');
return image.addBands(ndvi).addBands(ndwi).addBands(ndsi);
};
// Use fewer data points by filtering for cloud-free pixels only once
var sentinel = ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(pointJSP)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30));
Usando processamento de dados eficiente para GEE para minimizar atrasos de script
Esta solução integra tratamento otimizado de dados combinando cálculos de índices e limites. JavaScript é aplicado para processamento do Google Earth Engine.
var landsat8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.filterBounds(pointJSP)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUD_COVER', 30));
// Apply water mask for permanent water areas
var waterMask = ee.Image('JRC/GSW1_4/GlobalSurfaceWater').select('occurrence').gt(80).unmask();
// Add indices to Landsat 8 imagery
var landsatIndices = landsat8.map(addIndices);
var composite = landsatIndices.reduce(ee.Reducer.percentile([30])).clip(pointJSP).mask(waterMask.eq(0));
Map.addLayer(composite, {bands: ['RED', 'GREEN', 'BLUE'], min: 0, max: 3000}, 'Landsat Composite');
Map.addLayer(waterMask, {min: 0, max: 1, palette: ['white', 'blue']}, 'Water Mask', false);
Melhorando a eficiência dos scripts de sensoriamento remoto
Uma consideração importante ao trabalhar com scripts do Google Earth Engine (GEE) é garantir que as operações sejam realizadas de forma eficiente. Embora o uso de grandes conjuntos de dados, como Sentinel e Landsat, seja comum na análise ambiental, o grande volume de dados pode retardar a execução do script. Um método para melhorar o desempenho é garantir que apenas os dados necessários sejam processados. Usando comandos como e minimiza o tamanho do conjunto de dados, o que ajuda a agilizar os cálculos. A seleção de intervalos de datas e regiões geográficas específicas pode reduzir significativamente o tempo de execução.
Outro aspecto que impacta o desempenho do script GEE é a forma como os dados são processados. O exemplo de script usa uma função para calcular índices importantes como NDVI, NDWI e NDSI. Esses índices são adicionados como bandas às coleções de imagens, o que permite uma análise mais aprofundada. No entanto, um erro comum é aplicar essas funções a um conjunto de dados inteiro sem filtrar primeiro. É crucial aplicar tais operações após a filtragem para evitar cálculos desnecessários em dados irrelevantes.
A visualização é outro elemento do script que pode ser otimizado. Adicionar muitas camadas ou visualizações complexas pode atrasar o tempo de processamento. O script usa parâmetros visuais predefinidos para renderizar as composições, mas o desempenho pode ser melhorado desabilitando determinadas camadas, a menos que sejam explicitamente necessárias. Isso ajuda a manter o script leve e ao mesmo tempo manter sua funcionalidade. Usando comandos também garantem que apenas a área necessária seja renderizada, reduzindo a carga geral de processamento.
- Como posso melhorar o desempenho dos meus scripts GEE?
- Otimizar o uso de , e reduza o tamanho do seu conjunto de dados antes do processamento.
- Por que meu script GEE demora tanto para ser executado?
- Grandes conjuntos de dados e cálculos complexos podem retardar a execução. Usar e limitar o processamento às áreas relevantes.
- Posso reduzir o número de imagens processadas no GEE?
- Sim, aplicando para cobertura de nuvem e focar em períodos específicos.
- Como posso simplificar os cálculos de índice no meu script?
- Use uma função como para agilizar a adição de vários índices (por exemplo, NDVI, NDWI) em uma única etapa.
- É possível visualizar apenas as camadas essenciais?
- Sim, desabilite camadas desnecessárias e use parâmetros de visualização simplificados com para melhor desempenho.
A otimização dos scripts do Google Earth Engine envolve o gerenciamento eficiente de grandes conjuntos de dados, a aplicação antecipada de filtros e a redução de operações de dados desnecessárias. Concentrando-se em áreas essenciais, como filtrar por e localização podem reduzir significativamente o tempo de processamento.
Ao incorporar funções como e usando máscaras de limite para eliminar dados irrelevantes, o desempenho do script pode ser melhorado ainda mais. Essas técnicas podem agilizar a execução, oferecendo resultados mais rápidos e melhor aproveitamento da plataforma Google Earth Engine.
- Este artigo foi criado usando conteúdo baseado na documentação oficial do Google Earth Engine, que fornece insights sobre técnicas de otimização de scripts. Guias do Google Earth Engine
- Informações adicionais foram coletadas no fórum da comunidade GEE, oferecendo discussões e soluções para melhorar o desempenho em scripts complexos. Comunidade do Google Earth Engine
- As melhores práticas para lidar com grandes conjuntos de dados foram referenciadas na literatura de sensoriamento remoto e nos tutoriais disponíveis no link a seguir. Observatório da Terra da NASA