Optimització del temps d'execució dels scripts del motor de Google Earth
Google Earth Engine (GEE) és una plataforma potent per analitzar dades geoespacials a gran escala. Tanmateix, els usuaris sovint es troben amb problemes amb el temps d'execució, fins i tot quan els seus scripts semblen bàsics. Un script que triga diversos minuts a executar-se pot afectar la productivitat i retardar la informació.
En aquest cas, un usuari ha creat un script senzill per processar les dades de Sentinel i Landsat 8. Malgrat la seva senzillesa, l'script triga uns 3-5 minuts a executar-se. Entendre per què passa això i com optimitzar l'script és essencial per al processament de dades eficient.
El rendiment d'un script GEE depèn de diversos factors, com ara la mida de les dades, el filtratge i la complexitat computacional. Reduir el temps d'execució implica identificar colls d'ampolla dins de l'script, com ara operacions innecessàries o grans conjunts de dades que alentiren el processament.
Aquest article explorarà les possibles causes dels temps d'execució lents a GEE i proporcionarà consells pràctics per optimitzar l'script donat. Mitjançant la implementació d'aquestes estratègies, els usuaris poden millorar significativament la velocitat i el rendiment de les seves tasques d'anàlisi de dades geoespacials.
Comandament | Exemple d'ús |
---|---|
normalizedDifference() | Aquesta funció s'utilitza per calcular índexs com ara NDVI, NDWI i NDSI calculant la diferència entre dues bandes, dividida per la seva suma. És específic per a l'anàlisi de teledetecció on es necessiten índexs de vegetació, aigua i neu. |
filterBounds() | Filtra una col·lecció d'imatges per incloure només imatges que tallen una geometria determinada. En aquest cas, restringeix les dades de satèl·lit a l'àrea al voltant del punt d'interès definit, fent que el processament sigui més eficient en excloure les dades irrellevants. |
filterDate() | Aquesta ordre limita la col·lecció d'imatges a un interval de dates específic. Per al nostre problema, és crucial analitzar les diferències entre el mateix període de temps per als conjunts de dades Sentinel i Landsat. |
addBands() | Afegeix bandes calculades noves (com ara NDVI, NDWI i NDSI) a cada imatge de la col·lecció. Això és essencial per aplicar diversos índexs a la mateixa col·lecció d'imatges sense crear conjunts de dades separats. |
unmask() | Omple els píxels emmascarats amb un valor especificat. Al nostre script, s'utilitza per desenmascarar àrees d'aigua permanents, garantint que les dades es processin de manera coherent a tota la regió. |
reduce() | Redueix una col·lecció d'imatges mitjançant una funció reductora especificada, com ara ee.Reducer.percentile(). Aquí, s'utilitza per calcular el percentil 30 dels valors de píxels, optimitzant la generació d'imatges compostes. |
clip() | Retalla una imatge als límits de la regió d'interès especificada. Això garanteix que només es processin les dades rellevants per a l'àrea, la qual cosa accelera l'execució. |
gt() | Aquesta ordre significa "mayor que" i s'utilitza per crear imatges binàries basades en un llindar. En aquest cas, identifica zones amb una presència d'aigua superior al 80%. |
map() | Aplica una funció a cada imatge de la col·lecció. Al nostre exemple, aplica la funció addIndices per calcular NDVI, NDWI i NDSI a totes les imatges de la col·lecció, racionalitzant el flux de treball. |
Optimització dels scripts GEE per a una millora de l'eficiència
En el guió proporcionat, l'objectiu és extreure i processar imatges de satèl·lit de dues fonts diferents: Sentinel i Landsat. El Google Earth Engine (GEE) La plataforma permet als usuaris accedir a grans quantitats de dades de satèl·lit i aplicar diverses operacions com ara el filtratge, la indexació i la visualització. Una de les característiques clau utilitzades en aquest script és el Diferència normalitzada () funció, que s'utilitza per calcular índexs importants com NDVI, NDWI i NDSI. Aquests índexs són crucials per analitzar la vegetació, l'aigua i la coberta de neu a la regió especificada. El guió comença definint un punt d'interès i centra el mapa en ell utilitzant les coordenades proporcionades.
L'script aplica diversos filtres, com ara filterDate() i filterBounds(), per reduir la quantitat de dades que s'estan processant, millorant així el temps d'execució. Per exemple, filterBounds() assegura que només s'inclouen les imatges que tallen l'àrea d'interès, mentre que filterDate() limita les imatges a un interval de dates específic. Això és essencial per processar grans conjunts de dades com les imatges de Sentinel i Landsat, ja que minimitza la càrrega computacional. A més, el filtre per a la cobertura del núvol ajuda a descartar imatges que tenen massa núvol, garantint una anàlisi de millor qualitat.
Un aspecte important del guió és el addBands() funció, que afegeix índexs calculats (NDVI, NDWI, NDSI) a les imatges, fent-les accessibles per a una anàlisi posterior. El guió també incorpora una màscara d'aigua permanent que utilitza dades del conjunt de dades del JRC Global Surface Water. La màscara d'aigua ajuda a excloure les zones amb una alta presència d'aigua (superior al 80%), que d'una altra manera podria esbiaixar els resultats de l'anàlisi de la vegetació i la neu. Això es fa a través del gt() i desenmascarar() funcions, que permeten a l'script aïllar àrees en funció dels valors de píxels.
Finalment, el guió utilitza el reduir () funcionen amb el reductor de percentils per generar una imatge composta que representa el percentil 30 dels valors de píxels seleccionats. A continuació, aquesta imatge composta es retalla a la regió d'interès i es visualitza al mapa amb el clip () funció. Els paràmetres visuals es defineixen tant per als compostos Sentinel com Landsat, permetent a l'usuari visualitzar-los amb la configuració de color adequada. En combinar diversos passos de processament d'imatges com el filtratge, l'emmascarament i la generació de compostos, aquest script proporciona una manera eficient d'analitzar imatges de satèl·lit, tot i que es podria aplicar una optimització addicional per reduir els temps d'execució.
Optimització de l'execució d'scripts del motor de Google Earth per a un processament més ràpid
Aquesta solució utilitza Google Earth Engine (GEE) amb èmfasi en l'optimització del rendiment reduint els temps de recuperació de dades i simplificant les operacions. JavaScript s'utilitza com a llenguatge 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));
Ús d'un processament de dades eficient per a GEE per minimitzar els retards dels scripts
Aquesta solució integra el maneig de dades optimitzat mitjançant la combinació de càlculs d'índexs i llindars. JavaScript s'aplica per al processament 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);
Millora de l'eficiència dels scripts de teledetecció
Una consideració clau quan es treballa amb scripts de Google Earth Engine (GEE) és assegurar-se que les operacions es gestionen de manera eficient. Tot i que l'ús de grans conjunts de dades com Sentinel i Landsat és habitual en l'anàlisi ambiental, el gran volum de dades pot frenar l'execució de l'script. Un mètode per millorar el rendiment és assegurar-se que només es processen les dades necessàries. Utilitzant ordres com filterBounds() i filterDate() minimitza la mida del conjunt de dades, cosa que ajuda a racionalitzar els càlculs. La selecció d'intervals de dates i regions geogràfiques específiques pot reduir significativament el temps d'execució.
Un altre aspecte que afecta el rendiment de l'script GEE és com es processen les dades. L'exemple d'script utilitza una funció per calcular índexs importants com NDVI, NDWI i NDSI. Aquests índexs s'afegeixen com a bandes a les col·leccions d'imatges, la qual cosa permet una anàlisi més exhaustiva. Tanmateix, un error comú és aplicar aquestes funcions a un conjunt de dades sencer sense filtrar primer. És crucial aplicar aquestes operacions després del filtratge per evitar càlculs innecessaris amb dades irrellevants.
La visualització és un altre element de l'script que es pot optimitzar. Afegir massa capes o visualitzacions complexes pot reduir el temps de processament. L'script utilitza paràmetres visuals predefinits per representar els compostos, però el rendiment es pot millorar desactivant determinades capes tret que siguin necessàries explícitament. Això ajuda a mantenir el script lleuger alhora que es manté la seva funcionalitat. Utilitzant clip () Les ordres també garanteixen que només es representa l'àrea necessària, reduint la càrrega general del processament.
Preguntes freqüents sobre l'optimització dels scripts del motor de Google Earth
- Com puc millorar el rendiment dels meus scripts GEE?
- Optimitzar l'ús de filterDate(), filterBounds(), i reduïu la mida del vostre conjunt de dades abans de processar-lo.
- Per què el meu script GEE triga tant a executar-se?
- Els grans conjunts de dades i els càlculs complexos poden alentir l'execució. Ús reduce() i clip() limitar el processament a les àrees rellevants.
- Puc reduir el nombre d'imatges processades a GEE?
- Sí, sol·licitant filter() per a la cobertura del núvol i filterDate() centrar-se en períodes concrets.
- Com puc simplificar els càlculs d'índex al meu script?
- Utilitzeu una funció com addBands() per racionalitzar l'addició de diversos índexs (p. ex., NDVI, NDWI) en un sol pas.
- És possible visualitzar només les capes essencials?
- Sí, desactiveu les capes innecessàries i utilitzeu paràmetres de visualització simplificats amb Map.addLayer() per a un millor rendiment.
Consideracions finals sobre l'optimització dels scripts GEE
L'optimització dels scripts de Google Earth Engine implica la gestió eficient de grans conjunts de dades, l'aplicació anticipada de filtres i la reducció de les operacions de dades innecessàries. Centrant-se en àrees essencials com filtrar per data i la ubicació poden reduir significativament el temps de processament.
Mitjançant la incorporació de funcions com ara addBands i utilitzant màscares de llindar per eliminar dades irrellevants, el rendiment de l'script es pot millorar encara més. Aquestes tècniques poden racionalitzar l'execució, oferint resultats més ràpids i una millor utilització de la plataforma de Google Earth Engine.
Fonts i referències per optimitzar els scripts del motor de Google Earth
- Aquest article s'ha creat utilitzant contingut basat en la documentació oficial de Google Earth Engine, que proporciona informació sobre les tècniques d'optimització d'scripts. Guies del motor de Google Earth
- Es va recopilar informació addicional del fòrum de la comunitat GEE, oferint debats i solucions per millorar el rendiment en scripts complexos. Comunitat de Google Earth Engine
- Les millors pràctiques per manejar grans conjunts de dades es van fer referència a la literatura de teledetecció i tutorials disponibles al següent enllaç. Observatori de la Terra de la NASA