A Google Earth Engine-szkriptek végrehajtási idejének optimalizálása
A Google Earth Engine (GEE) egy hatékony platform nagyszabású térinformatikai adatok elemzésére. A felhasználók azonban gyakran találkoznak problémákkal a végrehajtási idővel kapcsolatban, még akkor is, ha a szkriptjeik alapvetőnek tűnnek. A néhány percet igénybe vevő szkript befolyásolhatja a termelékenységet és késleltetheti a betekintést.
Ebben az esetben a felhasználó egy egyszerű szkriptet hozott létre a Sentinel és a Landsat 8 adatok feldolgozásához. Az egyszerűsége ellenére a szkript végrehajtása körülbelül 3-5 percet vesz igénybe. A hatékony adatfeldolgozáshoz elengedhetetlen annak megértése, hogy ez miért történik, és hogyan optimalizáljuk a szkriptet.
A GEE-szkript teljesítménye számos tényezőtől függ, beleértve az adatméretet, a szűrést és a számítási bonyolultságot. A végrehajtási idő csökkentése magában foglalja a szkripten belüli szűk keresztmetszetek azonosítását, például a szükségtelen műveleteket vagy a feldolgozást lelassító nagy adatkészleteket.
Ez a cikk feltárja a lassú végrehajtási idők lehetséges okait a GEE-ben, és gyakorlati tippeket ad az adott szkript optimalizálásához. E stratégiák megvalósításával a felhasználók jelentősen javíthatják térinformatikai elemzési feladataik sebességét és teljesítményét.
Parancs | Használati példa |
---|---|
normalizedDifference() | Ez a függvény olyan indexek kiszámítására szolgál, mint az NDVI, NDWI és NDSI, két sáv közötti különbség kiszámításával, osztva azok összegével. Kifejezetten a távérzékelési elemzésekre vonatkozik, ahol növényzet-, víz- és hóindexekre van szükség. |
filterBounds() | Szűri a képgyűjteményt úgy, hogy csak azokat a képeket tartalmazza, amelyek egy adott geometriát metszenek. Ebben az esetben a műholdadatokat a meghatározott érdekes pont körüli területre korlátozza, így a feldolgozást hatékonyabbá teszi az irreleváns adatok kizárásával. |
filterDate() | Ez a parancs egy adott dátumtartományra korlátozza a képgyűjteményt. Problémánk szempontjából kulcsfontosságú, hogy elemezzük a Sentinel és a Landsat adatkészletek azonos időszaka közötti különbségeket. |
addBands() | Új számított sávokat (például NDVI, NDWI és NDSI) ad hozzá a gyűjtemény minden képéhez. Ez elengedhetetlen ahhoz, hogy több indexet alkalmazhasson ugyanarra a képgyűjteményre külön adatkészletek létrehozása nélkül. |
unmask() | A maszkolt képpontokat meghatározott értékkel tölti fel. Szkriptünkben az állandó vízterületek leleplezésére szolgál, biztosítva az adatok következetes feldolgozását az egész régióban. |
reduce() | Csökkenti a képgyűjteményt egy megadott szűkítő függvény használatával, például ee.Reducer.percentile(). Itt a pixelértékek 30. percentilisének kiszámítására szolgál, optimalizálva az összetett kép létrehozását. |
clip() | A képet a megadott érdeklődési terület határaihoz vágja. Ez biztosítja, hogy csak a területre vonatkozó adatok kerüljenek feldolgozásra, ami felgyorsítja a végrehajtást. |
gt() | Ez a parancs a "nagyobb mint" rövidítése, és küszöbérték alapján bináris képek létrehozására szolgál. Ebben az esetben olyan területeket azonosít, ahol a víz előfordulása meghaladja a 80%-ot. |
map() | Egy függvényt alkalmaz a gyűjtemény minden képére. Példánkban az addIndexes függvényt alkalmazza az NDVI, NDWI és NDSI kiszámítására a gyűjtemény összes képére vonatkozóan, és egyszerűsíti a munkafolyamatot. |
A GEE-szkriptek optimalizálása a hatékonyság növelése érdekében
A mellékelt forgatókönyvben a cél két különböző forrásból származó műholdképek kinyerése és feldolgozása: Sentinel és Landsat. A Google Earth Engine (GEE) A platform lehetővé teszi a felhasználók számára, hogy hatalmas mennyiségű műholdadathoz hozzáférjenek, és különféle műveleteket alkalmazzanak, például szűrést, indexelést és megjelenítést. A szkriptben használt egyik kulcsfontosságú funkció a normalizáltDifference() függvény, amelyet olyan fontos indexek kiszámítására használnak, mint az NDVI, NDWI és NDSI. Ezek az indexek kulcsfontosságúak a növényzet, a víz és a hótakaró elemzéséhez a megadott régióban. A szkript egy érdekes pont meghatározásával kezdődik, és a megadott koordináták segítségével középre állítja a térképet.
A szkript több szűrőt alkalmaz, mint pl filterDate() és filterBounds(), hogy csökkentse a feldolgozott adatok mennyiségét, ezáltal javítva a végrehajtási időt. Például, filterBounds() biztosítja, hogy csak az érdeklődési területet metsző képek kerüljenek bele, míg filterDate() egy adott dátumtartományra korlátozza a képeket. Ez elengedhetetlen a nagy adatkészletek, például a Sentinel és a Landsat képek feldolgozásához, mivel minimálisra csökkenti a számítási terhelést. Ezenkívül a szűrő A felhőalapú lefedettség segít elvetni a túl sok felhőt tartalmazó képeket, így jobb elemzési minőséget biztosít.
A forgatókönyv egyik fontos szempontja a addBands() funkció, amely kiszámított indexeket (NDVI, NDWI, NDSI) ad hozzá a képekhez, így elérhetővé teszi azokat további elemzéshez. A szkript egy állandó vízmaszkot is tartalmaz, amely a JRC Global Surface Water adatkészletéből származó adatokat használ. A vízmaszk segít kizárni azokat a területeket, ahol magas a víz előfordulása (több mint 80%), amely egyébként torzíthatja a növényzet- és hóelemzés eredményeit. Ez a gt() és leleplez() függvények, amelyek lehetővé teszik a szkript számára, hogy pixelértékek alapján elkülönítse a területeket.
Végül a szkript a csökkenti() funkciót a percentilis reduktorral egy olyan összetett kép létrehozásához, amely a kiválasztott pixelértékek 30. percentilisét reprezentálja. Ezt az összetett képet azután a kívánt régióhoz vágja, és a térkép segítségével megjeleníti a térképen csipesz() funkció. A vizuális paraméterek mind a Sentinel, mind a Landsat kompozitokhoz meg vannak határozva, lehetővé téve a felhasználó számára, hogy megfelelő színbeállításokkal tekintse meg őket. A különféle képfeldolgozási lépések, például szűrés, maszkolás és összetett generálás kombinálásával ez a szkript hatékony módot biztosít a műholdképek elemzésére, bár további optimalizálás alkalmazható a végrehajtási idők csökkentésére.
A Google Earth Engine szkript-végrehajtásának optimalizálása a gyorsabb feldolgozás érdekében
Ez a megoldás a Google Earth Engine-t (GEE) használja, amely a teljesítmény optimalizálására helyezi a hangsúlyt az adatlekérési idők csökkentésével és a műveletek egyszerűsítésével. A JavaScriptet használják szkriptnyelvként.
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));
Hatékony adatfeldolgozás használata a GEE számára a szkriptkésések minimalizálására
Ez a megoldás integrálja az optimalizált adatkezelést az indexszámítások és a küszöbértékek kombinálásával. A JavaScriptet alkalmazzák a Google Earth Engine feldolgozásához.
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);
A távérzékelési szkriptek hatékonyságának javítása
A Google Earth Engine (GEE) szkriptekkel végzett munka során az egyik legfontosabb szempont a műveletek hatékony kezelésének biztosítása. Míg a nagy adathalmazok, például a Sentinel és a Landsat használata gyakori a környezetelemzésben, a hatalmas adatmennyiség lelassíthatja a szkriptek végrehajtását. A teljesítmény javításának egyik módja annak biztosítása, hogy csak a szükséges adatokat dolgozzák fel. Olyan parancsok használata, mint pl filterBounds() és filterDate() minimalizálja az adatkészlet méretét, ami elősegíti a számítások egyszerűsítését. Adott dátumtartományok és földrajzi régiók kiválasztása jelentősen csökkentheti a végrehajtási időt.
A GEE-szkript teljesítményét befolyásoló másik szempont az adatok feldolgozása. A szkriptpélda egy függvényt használ a fontos indexek, például az NDVI, NDWI és NDSI kiszámításához. Ezek az indexek sávként kerülnek a képgyűjteményekbe, ami alaposabb elemzést tesz lehetővé. Gyakori hiba azonban az, hogy az ilyen függvényeket szűrés nélkül alkalmazzák egy teljes adatkészletre. Alapvető fontosságú, hogy ezeket a műveleteket szűrés után alkalmazzuk, hogy elkerüljük az irreleváns adatokon végzett szükségtelen számításokat.
A vizualizáció a szkript másik eleme, amely optimalizálható. Túl sok réteg hozzáadása vagy összetett vizualizáció lelassíthatja a feldolgozási időt. A szkript előre meghatározott vizuális paramétereket használ a kompozitok megjelenítéséhez, de a teljesítmény javítható bizonyos rétegek letiltásával, hacsak nincs rájuk kifejezetten szükség. Ez segít megőrizni a szkript könnyű súlyát, miközben megőrzi funkcionalitását. Használata csipesz() A parancsok azt is biztosítják, hogy csak a szükséges terület kerüljön megjelenítésre, csökkentve a teljes feldolgozási terhet.
Gyakran ismételt kérdések a Google Earth Engine-szkriptek optimalizálásával kapcsolatban
- Hogyan javíthatom a GEE-szkriptjeim teljesítményét?
- Optimalizálja a használatát filterDate(), filterBounds(), és csökkentse az adatkészlet méretét a feldolgozás előtt.
- Miért tart ilyen sokáig a GEE-szkriptem futtatása?
- A nagy adatkészletek és az összetett számítások lelassíthatják a végrehajtást. Használat reduce() és clip() hogy a feldolgozást a releváns területekre korlátozzák.
- Csökkenthetem a GEE-ben feldolgozott képek számát?
- Igen, jelentkezéssel filter() felhőfedettséghez és filterDate() meghatározott időszakokra összpontosítani.
- Hogyan egyszerűsíthetem az indexszámításokat a szkriptemben?
- Használjon olyan függvényt, mint pl addBands() több index (pl. NDVI, NDWI) egy lépésben történő hozzáadásának egyszerűsítésére.
- Lehetséges-e csak a lényeges rétegeket megjeleníteni?
- Igen, tiltsa le a szükségtelen rétegeket, és használjon egyszerűsített megjelenítési paramétereket Map.addLayer() a jobb teljesítmény érdekében.
Utolsó gondolatok a GEE szkriptek optimalizálásával kapcsolatban
A Google Earth Engine-szkriptek optimalizálása magában foglalja a nagy adatkészletek hatékony kezelését, a szűrők korai alkalmazását és a szükségtelen adatműveletek csökkentését. A lényeges területekre összpontosítva, mint például a szűrés dátum és a hely jelentősen csökkentheti a feldolgozási időt.
Olyan funkciók beépítésével, mint pl addBands és küszöbmaszkok használatával az irreleváns adatok kiküszöbölésére a szkriptek teljesítménye tovább javítható. Ezek a technikák leegyszerűsíthetik a végrehajtást, gyorsabb eredményeket és a Google Earth Engine platform jobb kihasználását kínálva.
Források és hivatkozások a Google Earth Engine-szkriptek optimalizálásához
- Ez a cikk a hivatalos Google Earth Engine dokumentáción alapuló tartalom felhasználásával készült, amely betekintést nyújt a szkriptoptimalizálási technikákba. Google Earth Engine útmutatók
- További információkat gyűjtöttünk a GEE közösségi fórumról, amely vitákat és megoldásokat kínál az összetett szkriptek teljesítményének javítására. Google Earth Engine közösség
- A nagy adathalmazok kezelésének legjobb gyakorlataira hivatkoztunk a távérzékelési szakirodalomból és az alábbi linken elérhető oktatóanyagokból. NASA Föld Obszervatórium