Optimización del tiempo de ejecución de los scripts del motor de Google Earth
Google Earth Engine (GEE) es una poderosa plataforma para analizar datos geoespaciales a gran escala. Sin embargo, los usuarios suelen encontrar problemas con el tiempo de ejecución, incluso cuando sus scripts parecen básicos. Un script que tarda varios minutos en ejecutarse puede afectar la productividad y retrasar la obtención de información.
En este caso, un usuario ha creado un script sencillo para procesar datos de Sentinel y Landsat 8. A pesar de su simplicidad, el script tarda entre 3 y 5 minutos en ejecutarse. Comprender por qué sucede esto y cómo optimizar el script es esencial para un procesamiento de datos eficiente.
El rendimiento de un script GEE depende de varios factores, incluido el tamaño de los datos, el filtrado y la complejidad computacional. Reducir el tiempo de ejecución implica identificar cuellos de botella dentro del script, como operaciones innecesarias o grandes conjuntos de datos que ralentizan el procesamiento.
Este artículo explorará las posibles causas de los tiempos de ejecución lentos en GEE y brindará consejos prácticos para optimizar el script dado. Al implementar estas estrategias, los usuarios pueden mejorar significativamente la velocidad y el rendimiento de sus tareas de análisis de datos geoespaciales.
Dominio | Ejemplo de uso |
---|---|
normalizedDifference() | Esta función se utiliza para calcular índices como NDVI, NDWI y NDSI calculando la diferencia entre dos bandas, dividida por su suma. Es específico del análisis de teledetección donde se necesitan índices de vegetación, agua y nieve. |
filterBounds() | Filtra una colección de imágenes para incluir solo imágenes que intersectan una geometría determinada. En este caso, restringe los datos satelitales al área alrededor del punto de interés definido, lo que hace que el procesamiento sea más eficiente al excluir datos irrelevantes. |
filterDate() | Este comando limita la colección de imágenes a un rango de fechas específico. Para nuestro problema, es crucial analizar las diferencias entre el mismo período de tiempo para los conjuntos de datos Sentinel y Landsat. |
addBands() | Agrega nuevas bandas calculadas (como NDVI, NDWI y NDSI) a cada imagen de la colección. Esto es esencial para aplicar múltiples índices a la misma colección de imágenes sin crear conjuntos de datos separados. |
unmask() | Rellena los píxeles enmascarados con un valor especificado. En nuestro script, se utiliza para desenmascarar áreas de agua permanentes, asegurando que los datos se procesen de manera consistente en toda la región. |
reduce() | Reduce una colección de imágenes utilizando una función reductora especificada, como ee.Reducer.percentile(). Aquí, se utiliza para calcular el percentil 30 de los valores de píxeles, optimizando la generación de imágenes compuestas. |
clip() | Recorta una imagen a los límites de la región de interés especificada. Esto garantiza que solo se procesen los datos relevantes para el área, lo que acelera la ejecución. |
gt() | Este comando significa "mayor que" y se utiliza para crear imágenes binarias basadas en un umbral. En este caso, identifica áreas con ocurrencia hídrica superior al 80%. |
map() | Aplica una función a cada imagen de la colección. En nuestro ejemplo, aplica la función addIndices para calcular NDVI, NDWI y NDSI en todas las imágenes de la colección, agilizando el flujo de trabajo. |
Optimización de scripts GEE para mejorar la eficiencia
En el guión proporcionado, el objetivo es extraer y procesar imágenes satelitales de dos fuentes diferentes: Sentinel y Landsat. El La plataforma permite a los usuarios acceder a grandes cantidades de datos satelitales y aplicar diversas operaciones como filtrado, indexación y visualización. Una de las características clave utilizadas en este script es la función, que se emplea para calcular índices importantes como NDVI, NDWI y NDSI. Estos índices son cruciales para analizar la vegetación, el agua y la capa de nieve en la región especificada. El script comienza definiendo un punto de interés y centra el mapa en él utilizando las coordenadas proporcionadas.
El script aplica múltiples filtros, como y , para reducir la cantidad de datos que se procesan, mejorando así el tiempo de ejecución. Por ejemplo, límites de filtro() garantiza que sólo se incluyan las imágenes que cruzan el área de interés, mientras fechafiltro() limita las imágenes a un rango de fechas específico. Esto es esencial para procesar grandes conjuntos de datos como imágenes Sentinel y Landsat, ya que minimiza la carga computacional. Además, el La cobertura de nubes ayuda a descartar imágenes que tienen demasiadas nubes, lo que garantiza un análisis de mejor calidad.
Un aspecto importante del guión es la función, que agrega índices calculados (NDVI, NDWI, NDSI) a las imágenes, haciéndolas accesibles para análisis posteriores. El guión también incorpora una máscara de agua permanente utilizando datos del conjunto de datos de JRC Global Surface Water. La máscara de agua ayuda a excluir áreas con una alta presencia de agua (más del 80%), que de otro modo podrían distorsionar los resultados del análisis de vegetación y nieve. Esto se hace a través del y funciones, que permiten que el script aísle áreas en función de los valores de píxeles.
Finalmente, el guión utiliza el funciona con el reductor de percentiles para generar una imagen compuesta que representa el percentil 30 de los valores de píxeles seleccionados. Luego, esta imagen compuesta se recorta en la región de interés y se visualiza en el mapa utilizando el función. Los parámetros visuales están definidos para los compuestos Sentinel y Landsat, lo que permite al usuario verlos con la configuración de color adecuada. Al combinar varios pasos de procesamiento de imágenes, como filtrado, enmascaramiento y generación de compuestos, este script proporciona una manera eficiente de analizar imágenes satelitales, aunque se podría aplicar una mayor optimización para reducir los tiempos de ejecución.
Optimización de la ejecución de secuencias de comandos de Google Earth Engine para un procesamiento más rápido
Esta solución utiliza Google Earth Engine (GEE) con énfasis en optimizar el rendimiento reduciendo los tiempos de recuperación de datos y simplificando las operaciones. JavaScript se utiliza como lenguaje de secuencias de comandos.
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));
Uso de procesamiento de datos eficiente para GEE para minimizar los retrasos en los scripts
Esta solución integra un manejo optimizado de datos combinando cálculos de índices y umbrales. Se aplica JavaScript para el procesamiento de 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);
Mejora de la eficiencia de los scripts de teledetección
Una consideración clave al trabajar con secuencias de comandos de Google Earth Engine (GEE) es garantizar que las operaciones se manejen de manera eficiente. Si bien el uso de grandes conjuntos de datos como Sentinel y Landsat es común en el análisis ambiental, el gran volumen de datos puede ralentizar la ejecución de scripts. Un método para mejorar el rendimiento es garantizar que solo se procesen los datos necesarios. Usando comandos como y Minimiza el tamaño del conjunto de datos, lo que ayuda a agilizar los cálculos. Seleccionar intervalos de fechas y regiones geográficas específicas puede reducir significativamente el tiempo de ejecución.
Otro aspecto que afecta el rendimiento del script GEE es cómo se procesan los datos. El ejemplo de script utiliza una función para calcular índices importantes como NDVI, NDWI y NDSI. Estos índices se agregan como bandas a las colecciones de imágenes, lo que permite un análisis más exhaustivo. Sin embargo, un error común es aplicar este tipo de funciones a un conjunto de datos completo sin filtrar primero. Es crucial aplicar dichas operaciones después del filtrado para evitar cálculos innecesarios sobre datos irrelevantes.
La visualización es otro elemento del guión que se puede optimizar. Agregar demasiadas capas o visualizaciones complejas puede retrasar el tiempo de procesamiento. El script utiliza parámetros visuales predefinidos para representar las composiciones, pero el rendimiento se puede mejorar desactivando ciertas capas a menos que sean necesarias explícitamente. Esto ayuda a mantener el script liviano y al mismo tiempo mantener su funcionalidad. Usando Los comandos también garantizan que solo se represente el área necesaria, lo que reduce la carga general de procesamiento.
- ¿Cómo mejoro el rendimiento de mis scripts GEE?
- Optimizar el uso de , y reduzca el tamaño de su conjunto de datos antes de procesarlo.
- ¿Por qué mi script GEE tarda tanto en ejecutarse?
- Los grandes conjuntos de datos y los cálculos complejos pueden ralentizar la ejecución. Usar y limitar el procesamiento a áreas relevantes.
- ¿Puedo reducir la cantidad de imágenes procesadas en GEE?
- Si, aplicando para cobertura de nubes y centrarse en períodos específicos.
- ¿Cómo puedo simplificar los cálculos de índice en mi script?
- Utilice una función como para agilizar la adición de múltiples índices (por ejemplo, NDVI, NDWI) en un solo paso.
- ¿Es posible visualizar sólo las capas esenciales?
- Sí, deshabilite las capas innecesarias y use parámetros de visualización simplificados con para un mejor rendimiento.
La optimización de las secuencias de comandos de Google Earth Engine implica manejar de manera eficiente grandes conjuntos de datos, aplicar filtros con anticipación y reducir las operaciones de datos innecesarias. Centrándose en áreas esenciales como filtrar por y la ubicación pueden reducir significativamente el tiempo de procesamiento.
Al incorporar funciones como y utilizando máscaras de umbral para eliminar datos irrelevantes, el rendimiento del script se puede mejorar aún más. Estas técnicas pueden agilizar la ejecución, ofreciendo resultados más rápidos y una mejor utilización de la plataforma Google Earth Engine.
- Este artículo se creó utilizando contenido basado en la documentación oficial de Google Earth Engine, que proporciona información sobre técnicas de optimización de scripts. Guías del motor de Google Earth
- Se recopiló información adicional del foro de la comunidad GEE, que ofrece debates y soluciones para mejorar el rendimiento en scripts complejos. Comunidad de motores de Google Earth
- Se hizo referencia a las mejores prácticas para el manejo de grandes conjuntos de datos en la literatura sobre teledetección y en tutoriales disponibles en el siguiente enlace. Observatorio de la Tierra de la NASA