„Google“ žemės variklio scenarijų vykdymo laiko optimizavimas
Google Earth Engine (GEE) yra galinga platforma, skirta didelio masto geoerdviniams duomenims analizuoti. Tačiau vartotojai dažnai susiduria su vykdymo laiko problemomis, net kai jų scenarijai atrodo pagrindiniai. Scenarijus, kurio paleidimas trunka keletą minučių, gali paveikti produktyvumą ir uždelsti įžvalgas.
Šiuo atveju vartotojas sukūrė paprastą scenarijų Sentinel ir Landsat 8 duomenims apdoroti. Nepaisant savo paprastumo, scenarijus vykdomas maždaug 3–5 minutes. Norint efektyviai apdoroti duomenis, labai svarbu suprasti, kodėl taip nutinka ir kaip optimizuoti scenarijų.
GEE scenarijaus našumas priklauso nuo kelių veiksnių, įskaitant duomenų dydį, filtravimą ir skaičiavimo sudėtingumą. Sutrumpinant vykdymo laiką reikia nustatyti scenarijaus kliūtis, pvz., nereikalingas operacijas arba didelius duomenų rinkinius, kurie sulėtina apdorojimą.
Šiame straipsnyje bus nagrinėjamos galimos lėto GEE vykdymo laiko priežastys ir pateikiami praktiniai patarimai, kaip optimizuoti nurodytą scenarijų. Įgyvendindami šias strategijas, vartotojai gali žymiai pagerinti savo geoerdvinių duomenų analizės užduočių greitį ir našumą.
komandą | Naudojimo pavyzdys |
---|---|
normalizedDifference() | Ši funkcija naudojama tokiems indeksams kaip NDVI, NDWI ir NDSI apskaičiuoti, skaičiuojant skirtumą tarp dviejų juostų, padalijus iš jų sumos. Tai būdinga nuotolinio stebėjimo analizei, kai reikalingi augmenijos, vandens ir sniego indeksai. |
filterBounds() | Filtruoja vaizdų rinkinį, kad būtų įtraukti tik tie vaizdai, kurie kerta tam tikrą geometriją. Šiuo atveju jis apriboja palydovinius duomenis tik sritimi aplink apibrėžtą lankytiną vietą, todėl apdorojimas tampa efektyvesnis, nes neįtraukiami nesusiję duomenys. |
filterDate() | Ši komanda apriboja vaizdų rinkinį iki tam tikros datos sekos. Dėl mūsų problemos labai svarbu išanalizuoti skirtumus tarp to paties laikotarpio Sentinel ir Landsat duomenų rinkiniams. |
addBands() | Prideda naujas apskaičiuotas juostas (pvz., NDVI, NDWI ir NDSI) prie kiekvieno kolekcijos vaizdo. Tai būtina norint taikyti kelis indeksus tai pačiai vaizdų kolekcijai nekuriant atskirų duomenų rinkinių. |
unmask() | Užmaskuotus pikselius užpildo nurodyta reikšme. Mūsų scenarijuje jis naudojamas nuolatinėms vandens zonoms demaskuoti, užtikrinant, kad duomenys būtų nuosekliai apdorojami visame regione. |
reduce() | Sumažina vaizdų rinkinį naudodama nurodytą reduktoriaus funkciją, pvz., ee.Reducer.percentile(). Čia jis naudojamas pikselių verčių 30 procentiliui apskaičiuoti, optimizuojant sudėtinio vaizdo generavimą. |
clip() | Iškirpia vaizdą prie nurodytos dominančios srities ribų. Taip užtikrinama, kad būtų apdorojami tik su sritimi susiję duomenys, o tai pagreitina vykdymą. |
gt() | Ši komanda reiškia „didesnis nei“ ir naudojama dvejetainiams vaizdams kurti pagal slenkstį. Šiuo atveju jis nustato sritis, kuriose vandens yra daugiau nei 80%. |
map() | Kiekvienam kolekcijos vaizdui pritaiko funkciją. Mūsų pavyzdyje ji taiko funkciją addIndices, kad apskaičiuotų NDVI, NDWI ir NDSI visuose kolekcijos vaizduose, supaprastindama darbo eigą. |
GEE scenarijų optimizavimas siekiant didesnio efektyvumo
Pateiktame scenarijuje siekiama išgauti ir apdoroti palydovinius vaizdus iš dviejų skirtingų šaltinių: Sentinel ir Landsat. The „Google“ žemės variklis (GEE) platforma leidžia vartotojams pasiekti daugybę palydovinių duomenų ir taikyti įvairias operacijas, tokias kaip filtravimas, indeksavimas ir vizualizacija. Viena iš pagrindinių šiame scenarijuje naudojamų funkcijų yra normalizuotas skirtumas() funkcija, kuri naudojama svarbiems indeksams, pvz., NDVI, NDWI ir NDSI, apskaičiuoti. Šie rodikliai yra labai svarbūs analizuojant augmeniją, vandenį ir sniego dangą nurodytame regione. Scenarijus pradedamas apibrėžiant lankytiną vietą ir joje centruojamas žemėlapis, naudojant pateiktas koordinates.
Scenarijus taiko kelis filtrus, pvz filtro data () ir filterBounds(), sumažinti apdorojamų duomenų kiekį ir taip pagerinti vykdymo laiką. Pavyzdžiui, filterBounds() užtikrina, kad būtų įtraukti tik vaizdai, kertantys dominančią sritį, o filtro data () apriboja vaizdus iki tam tikros datos sekos. Tai būtina norint apdoroti didelius duomenų rinkinius, tokius kaip „Sentinel“ ir „Landsat“ vaizdai, nes tai sumažina skaičiavimo apkrovą. Be to, filtras Debesų aprėptis padeda atmesti vaizdus, kuriuose yra per daug debesų, užtikrinant geresnės kokybės analizę.
Vienas svarbus scenarijaus aspektas yra addBands () funkcija, kuri prideda prie vaizdų apskaičiuotus indeksus (NDVI, NDWI, NDSI), todėl jie tampa prieinami tolesnei analizei. Scenarijus taip pat apima nuolatinę vandens kaukę, naudojant duomenis iš JRC pasaulinio paviršiaus vandens duomenų rinkinio. Vandens kaukė padeda išskirti sritis, kuriose yra daug vandens (daugiau nei 80 %), o tai gali iškreipti augmenijos ir sniego analizės rezultatus. Tai daroma per gt() ir demaskuoti () funkcijos, leidžiančios scenarijui išskirti sritis pagal pikselių reikšmes.
Galiausiai scenarijus naudoja sumažinti () funkcija su procentilių reduktoriumi, kad būtų sukurtas sudėtinis vaizdas, atspindintis 30 procentilių pasirinktų pikselių reikšmių. Tada šis sudėtinis vaizdas iškirptas į dominančią sritį ir vizualizuojamas žemėlapyje naudojant klipas () funkcija. Vaizdiniai parametrai yra apibrėžti tiek Sentinel, tiek Landsat kompozitams, todėl vartotojas gali juos peržiūrėti su atitinkamais spalvų nustatymais. Sujungus įvairius vaizdo apdorojimo veiksmus, pvz., filtravimą, maskavimą ir sudėtinį generavimą, šis scenarijus yra efektyvus būdas analizuoti palydovinius vaizdus, tačiau norint sutrumpinti vykdymo laiką, galima pritaikyti tolesnį optimizavimą.
„Google“ žemės variklio scenarijaus vykdymo optimizavimas, kad būtų galima greičiau apdoroti
Šiame sprendime naudojamas „Google“ žemės variklis (GEE), kuriame pagrindinis dėmesys skiriamas našumo optimizavimui, sumažinant duomenų gavimo laiką ir supaprastinant operacijas. „JavaScript“ naudojama kaip scenarijų kalba.
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));
Veiksmingo duomenų apdorojimo naudojimas GEE siekiant sumažinti scenarijaus delsą
Šis sprendimas integruoja optimizuotą duomenų tvarkymą derinant indeksų skaičiavimus ir slenksčius. „Google“ žemės varikliui apdoroti taikoma „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);
Nuotolinio stebėjimo scenarijų efektyvumo gerinimas
Vienas iš pagrindinių aspektų dirbant su Google Earth Engine (GEE) scenarijais yra užtikrinti, kad operacijos būtų tvarkomos efektyviai. Nors aplinkos analizėje dažnai naudojami dideli duomenų rinkiniai, tokie kaip Sentinel ir Landsat, didžiulis duomenų kiekis gali sulėtinti scenarijaus vykdymą. Vienas iš būdų pagerinti našumą yra užtikrinti, kad būtų apdorojami tik būtini duomenys. Naudojant tokias komandas kaip filterBounds() ir filtro data () sumažina duomenų rinkinio dydį, o tai padeda supaprastinti skaičiavimus. Pasirinkus konkrečias dienų sekas ir geografinius regionus, vykdymo laikas gali žymiai sutrumpėti.
Kitas aspektas, turintis įtakos GEE scenarijaus veikimui, yra tai, kaip duomenys apdorojami. Scenarijaus pavyzdyje naudojama funkcija svarbiems indeksams, pvz., NDVI, NDWI ir NDSI, apskaičiuoti. Šie indeksai kaip juostos pridedami prie vaizdų kolekcijų, todėl galima atlikti išsamesnę analizę. Tačiau dažna klaida yra tokių funkcijų taikymas visam duomenų rinkiniui iš pradžių nefiltravus. Labai svarbu tokias operacijas taikyti po filtravimo, kad būtų išvengta nereikalingų nesusijusių duomenų skaičiavimų.
Vizualizacija yra dar vienas scenarijaus elementas, kurį galima optimizuoti. Pridėjus per daug sluoksnių ar sudėtingų vizualizacijų, apdorojimo laikas gali sutrumpėti. Scenarijus naudoja iš anksto nustatytus vaizdinius parametrus, kad būtų pateikti kompozitai, tačiau našumą galima pagerinti išjungus tam tikrus sluoksnius, nebent jie yra aiškiai reikalingi. Tai padeda išlaikyti scenarijų lengvą ir išlaikyti jo funkcionalumą. Naudojant klipas () komandos taip pat užtikrina, kad būtų atvaizduojamas tik reikalingas plotas, sumažinant bendrą apdorojimo naštą.
Dažnai užduodami klausimai apie „Google“ žemės variklio scenarijų optimizavimą
- Kaip pagerinti savo GEE scenarijų našumą?
- Optimizuokite naudojimą filterDate(), filterBounds(), ir prieš apdorodami sumažinkite duomenų rinkinio dydį.
- Kodėl mano GEE scenarijus vykdomas taip ilgai?
- Dideli duomenų rinkiniai ir sudėtingi skaičiavimai gali sulėtinti vykdymą. Naudokite reduce() ir clip() apriboti apdorojimą atitinkamose srityse.
- Ar galiu sumažinti GEE apdorojamų vaizdų skaičių?
- Taip, kreipiantis filter() debesų padengimui ir filterDate() sutelkti dėmesį į konkrečius laikotarpius.
- Kaip savo scenarijuje galiu supaprastinti indekso skaičiavimus?
- Naudokite tokią funkciją kaip addBands() supaprastinti kelių indeksų (pvz., NDVI, NDWI) pridėjimą vienu žingsniu.
- Ar įmanoma vizualizuoti tik esminius sluoksnius?
- Taip, išjunkite nereikalingus sluoksnius ir naudokite supaprastintus vizualizacijos parametrus Map.addLayer() geresniam veikimui.
Paskutinės mintys apie GEE scenarijų optimizavimą
„Google Earth Engine“ scenarijų optimizavimas apima efektyvų didelių duomenų rinkinių tvarkymą, ankstyvą filtrų taikymą ir nereikalingų duomenų operacijų mažinimą. Sutelkite dėmesį į esmines sritis, pvz., filtravimą pagal data ir vieta gali žymiai sutrumpinti apdorojimo laiką.
Įtraukiant tokias funkcijas kaip addBands ir naudojant slenksčio kaukes, kad būtų pašalinti nesusiję duomenys, scenarijaus našumas gali būti dar labiau pagerintas. Šie metodai gali supaprastinti vykdymą, siūlydami greitesnius rezultatus ir geresnį „Google Earth Engine“ platformos panaudojimą.
Šaltiniai ir nuorodos, kaip optimizuoti „Google“ žemės variklio scenarijus
- Šis straipsnis buvo sukurtas naudojant turinį, pagrįstą oficialia Google Earth Engine dokumentacija, kurioje pateikiama įžvalgų apie scenarijaus optimizavimo būdus. „Google“ žemės variklio vadovai
- Papildoma informacija buvo surinkta iš GEE bendruomenės forumo, kuriame siūlomos diskusijos ir sprendimai, kaip pagerinti sudėtingų scenarijų našumą. Google Earth Engine bendruomenė
- Geriausios didelių duomenų rinkinių tvarkymo praktikos buvo pateiktos nuotolinio stebėjimo literatūroje ir vadovėliuose, kuriuos rasite šioje nuorodoje. NASA Žemės observatorija