Optimalizace doby provádění skriptů Google Earth Engine Scripts
Google Earth Engine (GEE) je výkonná platforma pro analýzu rozsáhlých geoprostorových dat. Uživatelé se však často setkávají s problémy s dobou provádění, i když se jejich skripty zdají být základní. Skript, jehož spuštění trvá několik minut, může ovlivnit produktivitu a zpozdit statistiky.
V tomto případě uživatel vytvořil jednoduchý skript pro zpracování dat Sentinel a Landsat 8. Navzdory své jednoduchosti trvá spuštění skriptu asi 3-5 minut. Pochopení, proč k tomu dochází a jak optimalizovat skript, je nezbytné pro efektivní zpracování dat.
Výkon skriptu GEE závisí na několika faktorech, včetně velikosti dat, filtrování a výpočetní složitosti. Zkrácení doby provádění zahrnuje identifikaci úzkých míst ve skriptu, jako jsou zbytečné operace nebo velké datové sady, které zpomalují zpracování.
Tento článek prozkoumá možné příčiny pomalého provádění v GEE a poskytne praktické tipy pro optimalizaci daného skriptu. Implementací těchto strategií mohou uživatelé výrazně zlepšit rychlost a výkon svých úloh analýzy geoprostorových dat.
Příkaz | Příklad použití |
---|---|
normalizedDifference() | Tato funkce se používá k výpočtu indexů jako NDVI, NDWI a NDSI výpočtem rozdílu mezi dvěma pásmy, děleného jejich součtem. Je to specifické pro analýzu dálkového průzkumu, kde jsou potřeba indexy vegetace, vody a sněhu. |
filterBounds() | Filtruje kolekci obrázků tak, aby zahrnovala pouze obrázky, které protínají danou geometrii. V tomto případě omezuje satelitní data na oblast kolem definovaného bodu zájmu, čímž zefektivňuje zpracování vyloučením irelevantních dat. |
filterDate() | Tento příkaz omezuje sbírku obrázků na určité časové období. Pro náš problém je zásadní analyzovat rozdíly mezi stejným časovým obdobím pro datové sady Sentinel a Landsat. |
addBands() | Přidá nová vypočítaná pásma (jako NDVI, NDWI a NDSI) ke každému obrázku v kolekci. To je nezbytné pro aplikaci více indexů na stejnou kolekci obrázků bez vytváření samostatných datových sad. |
unmask() | Vyplní maskované pixely zadanou hodnotou. V našem skriptu se používá k demaskování trvalých vodních ploch, což zajišťuje konzistentní zpracování dat v celém regionu. |
reduce() | Zmenší kolekci obrázků pomocí zadané funkce redukce, jako je ee.Reducer.percentile(). Zde se používá k výpočtu 30. percentilu hodnot pixelů, čímž se optimalizuje generování složeného obrazu. |
clip() | Ořízne obraz k hranicím zadané oblasti zájmu. Tím je zajištěno, že jsou zpracovávána pouze data relevantní pro danou oblast, což zrychluje provádění. |
gt() | Tento příkaz znamená „větší než“ a používá se k vytváření binárních obrázků na základě prahové hodnoty. V tomto případě identifikuje oblasti s výskytem vody větším než 80 %. |
map() | Aplikuje funkci na každý obrázek v kolekci. V našem příkladu používá funkci addIndices k výpočtu NDVI, NDWI a NDSI pro všechny obrázky v kolekci, čímž zjednodušuje pracovní postup. |
Optimalizace GEE skriptů pro vyšší efektivitu
V poskytnutém skriptu je cílem extrahovat a zpracovat satelitní snímky ze dvou různých zdrojů: Sentinel a Landsat. The Google Earth Engine (GEE) Platforma umožňuje uživatelům přístup k obrovskému množství satelitních dat a použití různých operací, jako je filtrování, indexování a vizualizace. Jednou z klíčových funkcí používaných v tomto skriptu je normalizedDifference() funkce, která se používá k výpočtu důležitých indexů jako NDVI, NDWI a NDSI. Tyto indexy jsou klíčové pro analýzu vegetace, vody a sněhové pokrývky v určené oblasti. Skript začíná definováním bodu zájmu a vycentruje na něj mapu pomocí poskytnutých souřadnic.
Skript aplikuje více filtrů, jako např filterDate() a filterBounds(), snížit množství zpracovávaných dat a zkrátit tak dobu provádění. Například, filterBounds() zajišťuje, že budou zahrnuty pouze snímky protínající oblast zájmu filterDate() omezí snímky na konkrétní časové období. To je nezbytné pro zpracování velkých souborů dat, jako jsou snímky Sentinel a Landsat, protože to minimalizuje výpočetní zátěž. Kromě toho, filtr pro cloudové pokrytí pomáhá vyřadit snímky, které mají příliš mnoho cloudu, a zajistit tak kvalitnější analýzu.
Jedním z důležitých aspektů scénáře je addBands() funkce, která ke snímkům přidává vypočítané indexy (NDVI, NDWI, NDSI) a zpřístupňuje je pro další analýzu. Skript také obsahuje trvalou vodní masku využívající data z datového souboru globálních povrchových vod JRC. Vodní maska pomáhá při vyloučení oblastí s vysokým výskytem vody (nad 80 %), která by jinak mohla zkreslit výsledky rozboru vegetace a sněhu. To se provádí prostřednictvím gt() a odhalit() funkce, které umožňují skriptu izolovat oblasti na základě hodnot pixelů.
Nakonec skript používá snížit() funkce s percentilovým omezovačem pro generování složeného obrazu, který představuje 30. percentil vybraných hodnot pixelů. Tento složený obrázek je poté oříznut do oblasti zájmu a vizualizován na mapě pomocí klip() funkce. Vizuální parametry jsou definovány pro kompozity Sentinel i Landsat, což umožňuje uživateli je prohlížet s příslušným nastavením barev. Kombinací různých kroků zpracování obrazu, jako je filtrování, maskování a generování složených snímků, poskytuje tento skript efektivní způsob analýzy satelitních snímků, i když lze použít další optimalizaci, aby se zkrátila doba provádění.
Optimalizace spouštění skriptu Google Earth Engine pro rychlejší zpracování
Toto řešení využívá Google Earth Engine (GEE) s důrazem na optimalizaci výkonu zkrácením doby načítání dat a zjednodušením operací. Jako skriptovací jazyk se používá JavaScript.
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));
Použití efektivního zpracování dat pro GEE k minimalizaci zpoždění skriptů
Toto řešení integruje optimalizované zpracování dat kombinací výpočtů indexů a prahových hodnot. Pro zpracování Google Earth Engine se používá JavaScript.
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);
Zlepšení účinnosti skriptů dálkového průzkumu Země
Jedním z klíčových aspektů při práci se skripty Google Earth Engine (GEE) je zajištění efektivního zpracování operací. Zatímco použití velkých datových sad, jako jsou Sentinel a Landsat, je v analýze životního prostředí běžné, samotný objem dat může zpomalit provádění skriptů. Jednou z metod, jak zlepšit výkon, je zajistit, aby se zpracovávala pouze nezbytná data. Pomocí příkazů jako filterBounds() a filterDate() minimalizuje velikost datové sady, což pomáhá zefektivnit výpočty. Výběr konkrétních období a geografických oblastí může výrazně zkrátit dobu provádění.
Dalším aspektem, který ovlivňuje výkon skriptu GEE, je způsob zpracování dat. Příklad skriptu používá funkci k výpočtu důležitých indexů jako NDVI, NDWI a NDSI. Tyto indexy se přidávají jako pásma do kolekcí obrázků, což umožňuje důkladnější analýzu. Častou chybou je však použití takových funkcí na celou datovou sadu bez předchozího filtrování. Je důležité použít takové operace po filtrování, aby se předešlo zbytečným výpočtům na irelevantních datech.
Vizualizace je dalším prvkem skriptu, který lze optimalizovat. Přidání příliš mnoha vrstev nebo složitých vizualizací může zkrátit dobu zpracování. Skript používá k vykreslení kompozitů předdefinované vizuální parametry, ale výkon lze zlepšit vypnutím určitých vrstev, pokud nejsou výslovně potřeba. To pomáhá udržovat skript lehký při zachování jeho funkčnosti. Použití klip() příkazy také zajišťují, že je vykreslena pouze nezbytná oblast, čímž se snižuje celková zátěž zpracování.
Časté dotazy ohledně optimalizace skriptů Google Earth Engine Scripts
- Jak mohu zlepšit výkon svých GEE skriptů?
- Optimalizujte použití filterDate(), filterBounds()a před zpracováním zmenšete velikost vaší datové sady.
- Proč spuštění mého skriptu GEE trvá tak dlouho?
- Velké datové sady a složité výpočty mohou zpomalit provádění. Použití reduce() a clip() omezit zpracování na relevantní oblasti.
- Mohu snížit počet snímků zpracovaných v GEE?
- Ano, podáním žádosti filter() pro cloudové pokrytí a filterDate() zaměřit se na konkrétní období.
- Jak mohu zjednodušit výpočty indexu v mém skriptu?
- Použijte funkci jako addBands() zefektivnit přidávání více indexů (např. NDVI, NDWI) v jednom kroku.
- Je možné vizualizovat pouze základní vrstvy?
- Ano, deaktivujte nepotřebné vrstvy a použijte zjednodušené parametry vizualizace Map.addLayer() pro lepší výkon.
Závěrečné myšlenky na optimalizaci GEE skriptů
Optimalizace skriptů Google Earth Engine zahrnuje efektivní zpracování velkých datových sad, včasné použití filtrů a omezení zbytečných operací s daty. Zaměření na základní oblasti, jako je filtrování podle datum a umístění může výrazně zkrátit dobu zpracování.
Začleněním funkcí jako např addBands a pomocí prahových masek k eliminaci irelevantních dat lze výkon skriptu dále zlepšit. Tyto techniky mohou zefektivnit provádění, nabídnout rychlejší výsledky a lepší využití platformy Google Earth Engine.
Zdroje a odkazy pro optimalizaci skriptů Google Earth Engine
- Tento článek byl vytvořen pomocí obsahu založeného na oficiální dokumentaci Google Earth Engine, která poskytuje přehled o technikách optimalizace skriptů. Průvodce Google Earth Engine
- Další informace byly shromážděny z fóra komunity GEE, které nabízí diskuse a řešení pro zlepšení výkonu ve složitých skriptech. Komunita Google Earth Engine
- Osvědčené postupy pro práci s velkými datovými soubory byly uvedeny v literatuře a výukových programech dálkového průzkumu, které jsou k dispozici na následujícím odkazu. NASA Earth Observatory