Como fazer o JavaScript do Google Earth Engine funcionar mais rápido

Optimization

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.

  1. Como posso melhorar o desempenho dos meus scripts GEE?
  2. Otimizar o uso de , e reduza o tamanho do seu conjunto de dados antes do processamento.
  3. Por que meu script GEE demora tanto para ser executado?
  4. Grandes conjuntos de dados e cálculos complexos podem retardar a execução. Usar e limitar o processamento às áreas relevantes.
  5. Posso reduzir o número de imagens processadas no GEE?
  6. Sim, aplicando para cobertura de nuvem e focar em períodos específicos.
  7. Como posso simplificar os cálculos de índice no meu script?
  8. Use uma função como para agilizar a adição de vários índices (por exemplo, NDVI, NDWI) em uma única etapa.
  9. É possível visualizar apenas as camadas essenciais?
  10. 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.

  1. 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
  2. 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
  3. 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