Optimalisering av utførelsestiden for Google Earth Engine-skript
Google Earth Engine (GEE) er en kraftig plattform for å analysere storskala geospatiale data. Imidlertid støter brukere ofte på problemer med utførelsestiden, selv når skriptene deres virker grunnleggende. Et skript som tar flere minutter å kjøre kan påvirke produktiviteten og forsinke innsikt.
I dette tilfellet har en bruker laget et enkelt skript for å behandle Sentinel- og Landsat 8-data. Til tross for sin enkelhet tar skriptet omtrent 3-5 minutter å utføre. Å forstå hvorfor dette skjer og hvordan man kan optimalisere skriptet er avgjørende for effektiv databehandling.
Ytelsen til et GEE-skript avhenger av flere faktorer, inkludert datastørrelse, filtrering og beregningskompleksitet. Å redusere utførelsestiden innebærer å identifisere flaskehalser i skriptet, for eksempel unødvendige operasjoner eller store datasett som bremser behandlingen.
Denne artikkelen vil utforske de mulige årsakene til langsomme utførelsestider i GEE og gi praktiske tips for å optimalisere det gitte skriptet. Ved å implementere disse strategiene kan brukere forbedre hastigheten og ytelsen til sine geospatiale dataanalyseoppgaver betydelig.
Kommando | Eksempel på bruk |
---|---|
normalizedDifference() | Denne funksjonen brukes til å beregne indekser som NDVI, NDWI og NDSI ved å beregne differansen mellom to bånd, delt på summen deres. Den er spesifikk for fjernmålingsanalyse der vegetasjons-, vann- og snøindekser er nødvendig. |
filterBounds() | Filtrerer en bildesamling slik at den bare inkluderer bilder som skjærer en gitt geometri. I dette tilfellet begrenser den satellittdata til området rundt det definerte interessepunktet, noe som gjør behandlingen mer effektiv ved å ekskludere irrelevante data. |
filterDate() | Denne kommandoen begrenser bildesamlingen til en bestemt datoperiode. For vårt problem er det avgjørende å analysere forskjellene mellom samme tidsperiode for Sentinel- og Landsat-datasett. |
addBands() | Legger til nye beregnede bånd (som NDVI, NDWI og NDSI) til hvert bilde i samlingen. Dette er viktig for å bruke flere indekser på samme bildesamling uten å lage separate datasett. |
unmask() | Fyller maskerte piksler med en spesifisert verdi. I skriptet vårt brukes det til å avsløre permanente vannområder, for å sikre at data behandles konsekvent over hele regionen. |
reduce() | Reduserer en bildesamling ved å bruke en spesifisert reduksjonsfunksjon, for eksempel ee.Reducer.percentile(). Her brukes den til å beregne den 30. persentilen av pikselverdier, og optimalisere generering av komposittbilder. |
clip() | Klipper et bilde til grensene for den angitte regionen av interesse. Dette sikrer at kun data som er relevante for området behandles, noe som gir raskere utførelse. |
gt() | Denne kommandoen står for 'større enn' og brukes til å lage binære bilder basert på en terskel. I dette tilfellet identifiserer den områder med vannforekomst større enn 80 %. |
map() | Bruker en funksjon på hvert bilde i samlingen. I vårt eksempel bruker den addIndices-funksjonen for å beregne NDVI, NDWI og NDSI på tvers av alle bilder i samlingen, og effektiviserer arbeidsflyten. |
Optimalisering av GEE-skript for forbedret effektivitet
I det medfølgende skriptet er målet å trekke ut og behandle satellittbilder fra to forskjellige kilder: Sentinel og Landsat. De Google Earth Engine (GEE) plattformen lar brukere få tilgang til store mengder satellittdata og bruke ulike operasjoner som filtrering, indeksering og visualisering. En av nøkkelfunksjonene som brukes i dette skriptet er normalisert forskjell() funksjon, som brukes til å beregne viktige indekser som NDVI, NDWI og NDSI. Disse indeksene er avgjørende for å analysere vegetasjon, vann og snødekke i den angitte regionen. Skriptet starter med å definere et interessepunkt og sentrerer kartet på det ved å bruke koordinatene som er oppgitt.
Skriptet bruker flere filtre, som f.eks filterDate() og filterBounds(), for å redusere mengden data som behandles, og dermed forbedre utførelsestiden. For eksempel filterBounds() sikrer at kun bildene som krysser interesseområdet er inkludert, mens filterDate() begrenser bildene til en bestemt datoperiode. Dette er viktig for å behandle store datasett som Sentinel- og Landsat-bilder, siden det minimerer beregningsbelastningen. I tillegg har filter for skydekning bidrar til å forkaste bilder som har for mye sky, og sikrer analyser av bedre kvalitet.
Et viktig aspekt ved manuset er addBands() funksjon, som legger til beregnede indekser (NDVI, NDWI, NDSI) til bildene, noe som gjør dem tilgjengelige for videre analyse. Skriptet inneholder også en permanent vannmaske ved hjelp av data fra JRC Global Surface Water datasett. Vannmasken hjelper til med å utelukke områder med høy forekomst av vann (større enn 80 %), som ellers kan skjeve resultatene av vegetasjons- og snøanalysen. Dette gjøres gjennom gt() og avmaske() funksjoner, som lar skriptet isolere områder basert på pikselverdier.
Til slutt bruker skriptet redusere() funksjon med persentilreduksjonen for å generere et sammensatt bilde som representerer den 30. persentilen av de valgte pikselverdiene. Dette sammensatte bildet blir deretter klippet til området av interesse og visualisert på kartet ved hjelp av klipp() funksjon. De visuelle parameterne er definert for både Sentinel- og Landsat-komposittene, slik at brukeren kan se dem med passende fargeinnstillinger. Ved å kombinere ulike bildebehandlingstrinn som filtrering, maskering og komposittgenerering, gir dette skriptet en effektiv måte å analysere satellittbilder på, selv om ytterligere optimalisering kan brukes for å redusere utførelsestiden.
Optimalisering av Google Earth Engine-skriptutførelse for raskere behandling
Denne løsningen bruker Google Earth Engine (GEE) med vekt på å optimalisere ytelsen ved å redusere datainnhentingstider og forenkle operasjoner. JavaScript brukes som skriptspråk.
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));
Bruk av effektiv databehandling for GEE for å minimere skriptforsinkelser
Denne løsningen integrerer optimalisert datahåndtering ved å kombinere indeksberegninger og terskler. JavaScript brukes for Google Earth Engine-behandling.
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);
Forbedring av effektiviteten til fjernmålingsskript
En viktig faktor når du arbeider med Google Earth Engine-skript (GEE) er å sikre at operasjoner håndteres effektivt. Mens bruk av store datasett som Sentinel og Landsat er vanlig i miljøanalyser, kan det store datavolumet redusere kjøringen av skript. En metode for å forbedre ytelsen er å sikre at kun de nødvendige dataene blir behandlet. Bruke kommandoer som filterBounds() og filterDate() minimerer datasettstørrelsen, noe som bidrar til å strømlinjeforme beregninger. Valg av spesifikke datoperioder og geografiske områder kan redusere utførelsestiden betraktelig.
Et annet aspekt som påvirker GEE-skriptytelsen er hvordan dataene behandles. Skripteksemplet bruker en funksjon for å beregne viktige indekser som NDVI, NDWI og NDSI. Disse indeksene legges til som bånd til bildesamlingene, noe som gir mulighet for en mer grundig analyse. En vanlig feil er imidlertid å bruke slike funksjoner på et helt datasett uten å filtrere først. Det er avgjørende å bruke slike operasjoner etter filtrering for å unngå unødvendige beregninger på irrelevante data.
Visualisering er et annet element i skriptet som kan optimaliseres. Å legge til for mange lag eller komplekse visualiseringer kan føre til at behandlingstiden går ned. Skriptet bruker forhåndsdefinerte visuelle parametere for å gjengi komposittene, men ytelsen kan forbedres ved å deaktivere visse lag med mindre de er eksplisitt nødvendige. Dette hjelper til med å holde skriptet lett og samtidig opprettholde funksjonaliteten. Bruker klipp() kommandoer sikrer også at bare det nødvendige området blir gjengitt, noe som reduserer den totale behandlingsbyrden.
Vanlige spørsmål om optimalisering av Google Earth Engine-skript
- Hvordan forbedrer jeg ytelsen til GEE-skriptene mine?
- Optimaliser bruken av filterDate(), filterBounds(), og reduser størrelsen på datasettet før behandling.
- Hvorfor tar GEE-skriptet mitt så lang tid å kjøre?
- Store datasett og komplekse beregninger kan bremse utførelse. Bruk reduce() og clip() å begrense behandlingen til relevante områder.
- Kan jeg redusere antall bilder som behandles i GEE?
- Ja, ved å søke filter() for skydekning og filterDate() å fokusere på bestemte perioder.
- Hvordan kan jeg forenkle indeksberegninger i skriptet mitt?
- Bruk en funksjon som addBands() for å strømlinjeforme å legge til flere indekser (f.eks. NDVI, NDWI) i ett trinn.
- Er det mulig å visualisere bare de essensielle lagene?
- Ja, deaktiver unødvendige lag og bruk forenklede visualiseringsparametere med Map.addLayer() for bedre ytelse.
Siste tanker om optimalisering av GEE-skript
Optimalisering av Google Earth Engine-skript innebærer effektiv håndtering av store datasett, bruk av filtre tidlig og redusering av unødvendige dataoperasjoner. Fokuser på viktige områder som å filtrere etter dato og plassering kan redusere behandlingstiden betydelig.
Ved å inkorporere funksjoner som f.eks addBands og ved å bruke terskelmasker for å eliminere irrelevante data, kan skriptytelsen forbedres ytterligere. Disse teknikkene kan strømlinjeforme utførelsen, gi raskere resultater og bedre utnyttelse av Google Earth Engine-plattformen.
Kilder og referanser for optimalisering av Google Earth Engine-skript
- Denne artikkelen ble laget med innhold basert på offisiell Google Earth Engine-dokumentasjon, som gir innsikt i skriptoptimaliseringsteknikker. Google Earth Engine Guides
- Ytterligere informasjon ble samlet inn fra GEE-fellesskapsforumet, som tilbyr diskusjoner og løsninger for å forbedre ytelsen i komplekse skript. Google Earth Engine-fellesskap
- Beste praksis for håndtering av store datasett ble referert fra fjernmålingslitteratur og veiledninger tilgjengelig på følgende lenke. NASA Earth Observatory