Kako omogočiti hitrejše delovanje JavaScripta vašega Google Earth Engine

Kako omogočiti hitrejše delovanje JavaScripta vašega Google Earth Engine
Kako omogočiti hitrejše delovanje JavaScripta vašega Google Earth Engine

Optimiziranje časa izvajanja skriptov mehanizma Google Earth

Google Earth Engine (GEE) je zmogljiva platforma za analizo obsežnih geoprostorskih podatkov. Vendar pa uporabniki pogosto naletijo na težave s časom izvajanja, tudi če so njihovi skripti videti osnovni. Skript, ki traja nekaj minut, da se izvaja, lahko vpliva na produktivnost in zakasni vpoglede.

V tem primeru je uporabnik ustvaril preprost skript za obdelavo podatkov Sentinel in Landsat 8. Kljub svoji preprostosti traja izvajanje skripta približno 3-5 minut. Za učinkovito obdelavo podatkov je bistvenega pomena razumevanje, zakaj se to zgodi in kako optimizirati skript.

Učinkovitost skripta GEE je odvisna od več dejavnikov, vključno z velikostjo podatkov, filtriranjem in računsko kompleksnostjo. Zmanjšanje časa izvajanja vključuje prepoznavanje ozkih grl v skriptu, kot so nepotrebne operacije ali veliki nabori podatkov, ki upočasnjujejo obdelavo.

Ta članek bo raziskal možne vzroke za počasen čas izvajanja v GEE in zagotovil praktične nasvete za optimizacijo danega skripta. Z implementacijo teh strategij lahko uporabniki znatno izboljšajo hitrost in učinkovitost svojih nalog analize geoprostorskih podatkov.

Ukaz Primer uporabe
normalizedDifference() Ta funkcija se uporablja za izračun indeksov, kot so NDVI, NDWI in NDSI, tako da izračuna razliko med dvema pasovoma, deljeno z njuno vsoto. Specifičen je za analizo daljinskega zaznavanja, kjer so potrebni indeksi vegetacije, vode in snega.
filterBounds() Filtrira zbirko slik tako, da vključuje samo slike, ki sekajo dano geometrijo. V tem primeru omeji satelitske podatke na območje okoli definirane zanimive točke, zaradi česar je obdelava učinkovitejša z izključitvijo nepomembnih podatkov.
filterDate() Ta ukaz omeji zbirko slik na določeno časovno obdobje. Za našo težavo je ključnega pomena analizirati razlike med istim časovnim obdobjem za nabore podatkov Sentinel in Landsat.
addBands() Vsaki sliki v zbirki doda nove izračunane pasove (kot so NDVI, NDWI in NDSI). To je bistveno za uporabo več indeksov za isto zbirko slik brez ustvarjanja ločenih nizov podatkov.
unmask() Zapolni maskirane slikovne pike z določeno vrednostjo. V našem skriptu se uporablja za razkritje trajnih vodnih območij, kar zagotavlja dosledno obdelavo podatkov v celotni regiji.
reduce() Zmanjša zbirko slik z uporabo določene reduktorske funkcije, kot je ee.Reducer.percentile(). Tukaj se uporablja za izračun 30. percentila vrednosti slikovnih pik, kar optimizira ustvarjanje sestavljene slike.
clip() Izreže sliko na meje določenega območja zanimanja. To zagotavlja, da se obdelujejo samo podatki, pomembni za področje, kar pospeši izvedbo.
gt() Ta ukaz pomeni 'večje od' in se uporablja za ustvarjanje binarnih slik na podlagi praga. V tem primeru identificira območja z več kot 80 % vodnostjo.
map() Uporabi funkcijo za vsako sliko v zbirki. V našem primeru uporablja funkcijo addIndices za izračun NDVI, NDWI in NDSI za vse slike v zbirki, kar poenostavi potek dela.

Optimizacija GEE skriptov za večjo učinkovitost

V priloženem skriptu je cilj pridobiti in obdelati satelitske posnetke iz dveh različnih virov: Sentinel in Landsat. The Google Earth Engine (GEE) platforma omogoča uporabnikom dostop do ogromnih količin satelitskih podatkov in uporabo različnih operacij, kot so filtriranje, indeksiranje in vizualizacija. Ena od ključnih funkcij, uporabljenih v tem skriptu, je normalizirana razlika() funkcijo, ki se uporablja za izračun pomembnih indeksov, kot so NDVI, NDWI in NDSI. Ti indeksi so ključni za analizo vegetacije, vode in snežne odeje v določeni regiji. Skript se začne z definiranjem zanimive točke in centrira zemljevid na njej z uporabo navedenih koordinat.

Skript uporablja več filtrov, kot npr filterDate() in filterBounds(), da se zmanjša količina podatkov, ki se obdelujejo, in tako izboljša čas izvajanja. Na primer, filterBounds() zagotavlja, da so vključene samo slike, ki sekajo območje zanimanja, medtem ko filterDate() omejuje slike na določeno časovno obdobje. To je bistveno za obdelavo velikih naborov podatkov, kot so posnetki Sentinel in Landsat, saj zmanjša računalniško obremenitev. Poleg tega je filter za pokritost z oblaki pomaga zavrniti slike, ki imajo preveč oblakov, kar zagotavlja analizo boljše kakovosti.

Eden od pomembnih vidikov scenarija je addBands() funkcijo, ki posnetkom doda izračunane indekse (NDVI, NDWI, NDSI), tako da so dostopni za nadaljnjo analizo. Skript vključuje tudi trajno vodno masko z uporabo podatkov iz podatkovnega niza JRC Global Surface Water. Vodna maska ​​pomaga pri izključitvi območij z visoko prisotnostjo vode (več kot 80 %), ki bi sicer lahko popačila rezultate analize vegetacije in snega. To se naredi prek gt() in razkriti() funkcije, ki skriptu omogočajo izolacijo območij na podlagi vrednosti slikovnih pik.

Končno, skript uporablja zmanjšati () funkcijo z reduktorjem percentilov za ustvarjanje sestavljene slike, ki predstavlja 30. percentil izbranih vrednosti slikovnih pik. Ta sestavljena slika se nato pripne na območje zanimanja in vizualizira na zemljevidu z uporabo posnetek () funkcijo. Vizualni parametri so definirani tako za kompozite Sentinel kot Landsat, kar uporabniku omogoča ogled z ustreznimi barvnimi nastavitvami. S kombiniranjem različnih korakov obdelave slike, kot so filtriranje, maskiranje in sestavljeno ustvarjanje, ta skript zagotavlja učinkovit način za analizo satelitskih posnetkov, čeprav bi lahko uporabili dodatno optimizacijo za skrajšanje časa izvajanja.

Optimiziranje izvajanja skripta Google Earth Engine za hitrejšo obdelavo

Ta rešitev uporablja Google Earth Engine (GEE) s poudarkom na optimizaciji delovanja z zmanjšanjem časa pridobivanja podatkov in poenostavitvijo operacij. JavaScript se uporablja kot skriptni jezik.

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));

Uporaba učinkovite obdelave podatkov za GEE za zmanjšanje zamud pri skriptih

Ta rešitev vključuje optimizirano ravnanje s podatki s kombinacijo izračunov indeksov in pragov. JavaScript se uporablja za obdelavo 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);

Izboljšanje učinkovitosti skriptov za daljinsko zaznavanje

Eden ključnih dejavnikov pri delu s skripti Google Earth Engine (GEE) je zagotavljanje učinkovitega upravljanja operacij. Medtem ko je uporaba velikih naborov podatkov, kot sta Sentinel in Landsat, pogosta pri analizi okolja, lahko velika količina podatkov upočasni izvajanje skripta. Eden od načinov za izboljšanje zmogljivosti je zagotoviti, da se obdelujejo le potrebni podatki. Uporaba ukazov, kot je filterBounds() in filterDate() zmanjša velikost nabora podatkov, kar pomaga poenostaviti izračune. Izbira določenih časovnih obdobij in geografskih regij lahko znatno skrajša čas izvajanja.

Drug vidik, ki vpliva na delovanje skripta GEE, je način obdelave podatkov. Primer skripta uporablja funkcijo za izračun pomembnih indeksov, kot so NDVI, NDWI in NDSI. Ti indeksi so dodani kot pasovi zbirkam slik, kar omogoča temeljitejšo analizo. Vendar pa je pogosta napaka uporaba takšnih funkcij za celoten nabor podatkov brez predhodnega filtriranja. Ključnega pomena je, da takšne operacije uporabite po filtriranju, da se izognete nepotrebnim izračunom nepomembnih podatkov.

Vizualizacija je še en element skripta, ki ga je mogoče optimizirati. Dodajanje preveč plasti ali zapletenih vizualizacij lahko skrajša čas obdelave. Skript uporablja vnaprej določene vizualne parametre za upodabljanje kompozitov, vendar je zmogljivost mogoče izboljšati z onemogočanjem določenih slojev, razen če so izrecno potrebni. To pomaga ohranjati lahek skript in obenem ohranjati njegovo funkcionalnost. Uporaba posnetek () ukazi prav tako zagotavlja, da je upodobljeno samo potrebno območje, kar zmanjša celotno breme obdelave.

Pogosta vprašanja o optimizaciji skriptov mehanizma Google Earth

  1. Kako izboljšam delovanje svojih GEE skriptov?
  2. Optimizirajte uporabo filterDate(), filterBounds()in zmanjšajte velikost nabora podatkov pred obdelavo.
  3. Zakaj se moj GEE skript izvaja tako dolgo?
  4. Veliki nabori podatkov in zapleteni izračuni lahko upočasnijo izvajanje. Uporaba reduce() in clip() omejiti obdelavo na ustrezna področja.
  5. Ali lahko zmanjšam število slik, obdelanih v GEE?
  6. Da, s prijavo filter() za pokritost z oblaki in filterDate() osredotočiti na določena obdobja.
  7. Kako lahko poenostavim izračune indeksov v svojem skriptu?
  8. Uporabite funkcijo, kot je addBands() za poenostavitev dodajanja več indeksov (npr. NDVI, NDWI) v enem koraku.
  9. Ali je mogoče vizualizirati le bistvene plasti?
  10. Da, onemogoči nepotrebne plasti in uporabi poenostavljene parametre vizualizacije z Map.addLayer() za boljše delovanje.

Končne misli o optimizaciji skriptov GEE

Optimiziranje skriptov Google Earth Engine vključuje učinkovito ravnanje z velikimi nabori podatkov, zgodnjo uporabo filtrov in zmanjšanje nepotrebnih podatkovnih operacij. Osredotočanje na bistvena področja, kot je filtriranje po datum in lokacija lahko znatno skrajšata čas obdelave.

Z vključevanjem funkcij, kot je npr addBands in z uporabo pragovnih mask za odpravo nepomembnih podatkov je mogoče učinkovitost skripta še izboljšati. Te tehnike lahko poenostavijo izvedbo, ponudijo hitrejše rezultate in boljšo uporabo platforme Google Earth Engine.

Viri in reference za optimizacijo skriptov mehanizma Google Earth
  1. Ta članek je bil ustvarjen z uporabo vsebine, ki temelji na uradni dokumentaciji Google Earth Engine, ki ponuja vpogled v tehnike optimizacije skriptov. Google Earth Engine Guides
  2. Dodatne informacije so bile zbrane na forumu skupnosti GEE, ki ponuja razprave in rešitve za izboljšanje zmogljivosti v kompleksnih skriptih. Skupnost Google Earth Engine
  3. Najboljše prakse za ravnanje z velikimi nabori podatkov so bile navedene v literaturi o daljinskem zaznavanju in vadnicah, ki so na voljo na naslednji povezavi. NASA Earth Observatory