Kuidas panna oma Google Earthi mootor JavaScripti kiiremini tööle

Kuidas panna oma Google Earthi mootor JavaScripti kiiremini tööle
Kuidas panna oma Google Earthi mootor JavaScripti kiiremini tööle

Google Earthi mootori skriptide täitmisaja optimeerimine

Google Earth Engine (GEE) on võimas platvorm suuremahuliste georuumiliste andmete analüüsimiseks. Siiski on kasutajatel sageli probleeme täitmise ajaga, isegi kui nende skriptid näivad lihtsad. Skript, mille käitamiseks kulub mitu minutit, võib mõjutada tootlikkust ja aeglustada ülevaadet.

Sel juhul on kasutaja Sentineli ja Landsat 8 andmete töötlemiseks loonud lihtsa skripti. Vaatamata oma lihtsusele kulub skripti täitmiseks umbes 3-5 minutit. Tõhusaks andmetöötluseks on oluline mõista, miks see juhtub ja kuidas skripti optimeerida.

GEE-skripti jõudlus sõltub mitmest tegurist, sealhulgas andmete suurusest, filtreerimisest ja arvutuslikust keerukusest. Täitmisaja lühendamine hõlmab skripti kitsaskohtade tuvastamist, näiteks ebavajalikud toimingud või töötlemist aeglustavad suured andmestikud.

See artikkel uurib GEE aeglase täitmisaja võimalikke põhjuseid ja annab praktilisi näpunäiteid antud skripti optimeerimiseks. Neid strateegiaid rakendades saavad kasutajad oluliselt parandada oma georuumiandmete analüüsi ülesannete kiirust ja jõudlust.

Käsk Kasutusnäide
normalizedDifference() Seda funktsiooni kasutatakse indeksite (nt NDVI, NDWI ja NDSI) arvutamiseks, arvutades kahe riba vahelise erinevuse, mis jagatakse nende summaga. See on spetsiifiline kaugseireanalüüsile, kus on vaja taimestiku, vee ja lume indekseid.
filterBounds() Filtreerib pildikogu nii, et see hõlmaks ainult pilte, mis ristuvad antud geomeetriaga. Sel juhul piirab see satelliidiandmeid määratletud huvipunkti ümbritseva alaga, muutes töötlemise tõhusamaks, jättes välja ebaolulised andmed.
filterDate() See käsk piirab pildikogu kindla kuupäevavahemikuga. Meie probleemi jaoks on ülioluline analüüsida Sentineli ja Landsati andmekogumite sama perioodi erinevusi.
addBands() Lisab igale kollektsiooni pildile uued arvutatud ribad (nt NDVI, NDWI ja NDSI). See on oluline mitme indeksi rakendamiseks samale pildikogule ilma eraldi andmekogumeid loomata.
unmask() Täidab maskeeritud pikslid määratud väärtusega. Meie skriptis kasutatakse seda püsivate veealade paljastamiseks, tagades andmete järjepideva töötlemise kogu piirkonnas.
reduce() Vähendab pildikogu, kasutades määratud reduktorfunktsiooni, näiteks ee.Reducer.percentile(). Siin kasutatakse seda piksliväärtuste 30. protsentiili arvutamiseks, optimeerides liitpildi genereerimist.
clip() Lõikab pildi määratud huvipiirkonna piiridesse. See tagab, et töödeldakse ainult piirkonna jaoks olulisi andmeid, mis kiirendab täitmist.
gt() See käsk tähistab 'suurem kui' ja seda kasutatakse lävel põhinevate binaarpiltide loomiseks. Sel juhul tuvastab see piirkonnad, kus vett esineb rohkem kui 80%.
map() Rakendab funktsiooni igale kollektsiooni pildile. Meie näites rakendab see funktsiooni addIndices, et arvutada NDVI, NDWI ja NDSI kõigis kogus olevates piltides, lihtsustades töövoogu.

GEE skriptide optimeerimine tõhususe suurendamiseks

Kaasasoleva skripti eesmärk on eraldada ja töödelda satelliidipilte kahest erinevast allikast: Sentinel ja Landsat. The Google Earth Engine (GEE) platvorm võimaldab kasutajatel pääseda juurde suurele hulgale satelliidiandmetele ja rakendada erinevaid toiminguid, nagu filtreerimine, indekseerimine ja visualiseerimine. Üks selle skripti põhifunktsioone on normaliseeritud erinevus() funktsioon, mida kasutatakse selliste oluliste indeksite nagu NDVI, NDWI ja NDSI arvutamiseks. Need indeksid on määrava piirkonna taimestiku, vee- ja lumikatte analüüsimisel üliolulised. Skript algab huvipunkti määratlemisega ja tsentreerib kaardi sellele antud koordinaatide abil.

Skript rakendab mitut filtrit, nt filterDate() ja filterBounds(), et vähendada töödeldavate andmete hulka, parandades sellega täitmise aega. Näiteks filterBounds() tagab, et kaasatakse ainult huvipakkuvat ala lõikuvad pildid, samas filterDate() piirab pilte kindla kuupäevavahemikuga. See on oluline suurte andmekogumite, nagu Sentineli ja Landsati kujutiste töötlemiseks, kuna see vähendab arvutuslikku koormust. Lisaks on filter pilvkatte jaoks aitab liiga palju pilve sisaldavaid pilte kõrvale jätta, tagades parema analüüsikvaliteedi.

Skripti üks oluline aspekt on addBands() funktsioon, mis lisab kujutistele arvutatud indeksid (NDVI, NDWI, NDSI), muutes need edasiseks analüüsiks kättesaadavaks. Skript sisaldab ka püsivat veemaski, mis kasutab JRC ülemaailmse pinnavee andmestiku andmeid. Veemask aitab välistada piirkonnad, kus on palju vett (üle 80%), mis muidu võib taimestiku ja lumeanalüüsi tulemusi moonutada. Seda tehakse läbi gt() ja unmask () funktsioonid, mis võimaldavad skriptil piksliväärtuste alusel alasid eraldada.

Lõpuks kasutab skript vähenda () funktsiooni protsentiili reduktoriga, et luua liitkujutis, mis esindab valitud piksliväärtuste 30. protsentiili. See liitkujutis kärbitakse seejärel huvipakkuvasse piirkonda ja visualiseeritakse kaardil, kasutades nuppu klipp () funktsiooni. Visuaalsed parameetrid on määratletud nii Sentineli kui ka Landsati komposiitide jaoks, võimaldades kasutajal neid sobivate värviseadetega vaadata. Kombineerides erinevaid pilditöötlusetappe, nagu filtreerimine, maskeerimine ja liitgenereerimine, pakub see skript tõhusat viisi satelliidipiltide analüüsimiseks, kuigi täitmisaegade vähendamiseks saab rakendada täiendavat optimeerimist.

Google Earthi mootori skripti täitmise optimeerimine kiiremaks töötlemiseks

See lahendus kasutab Google Earth Engine'i (GEE) rõhuasetusega jõudluse optimeerimisele, vähendades andmete otsimise aega ja lihtsustades toiminguid. Skriptikeelena kasutatakse JavaScripti.

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

GEE jaoks tõhusa andmetöötluse kasutamine skripti viivituste minimeerimiseks

See lahendus integreerib optimeeritud andmetöötluse, kombineerides indeksite arvutusi ja lävesid. Google Earth Engine'i töötlemiseks rakendatakse JavaScripti.

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

Kaugseire skriptide tõhususe parandamine

Üks peamisi kaalutlusi Google Earth Engine (GEE) skriptidega töötamisel on tagada toimingute tõhus käsitsemine. Kuigi suurte andmekogumite, nagu Sentinel ja Landsat, kasutamine on keskkonnaanalüüsis tavaline, võib andmete suur hulk aeglustada skripti täitmist. Üks jõudluse parandamise meetod on tagada, et töödeldakse ainult vajalikke andmeid. Kasutades selliseid käske nagu filterBounds() ja filterDate() minimeerib andmekogumi suurust, mis aitab arvutusi sujuvamaks muuta. Konkreetsete kuupäevavahemike ja geograafiliste piirkondade valimine võib täitmisaega oluliselt lühendada.

Teine aspekt, mis mõjutab GEE skripti jõudlust, on see, kuidas andmeid töödeldakse. Skripti näide kasutab oluliste indeksite (nt NDVI, NDWI ja NDSI) arvutamiseks funktsiooni. Need indeksid lisatakse ribadena pildikogudesse, mis võimaldab põhjalikumat analüüsi. Levinud viga on aga selliste funktsioonide rakendamine tervele andmekogumile ilma eelnevalt filtreerimata. Selliste toimingute rakendamine pärast filtreerimist on ülioluline, et vältida asjakohaste andmete tarbetuid arvutusi.

Visualiseerimine on skripti veel üks element, mida saab optimeerida. Liiga paljude kihtide või keerukate visualiseerimiste lisamine võib töötlemisaega lühendada. Skript kasutab komposiitide renderdamiseks eelmääratletud visuaalseid parameetreid, kuid jõudlust saab parandada teatud kihtide keelamisega, välja arvatud juhul, kui need on otseselt vajalikud. See aitab hoida skripti kergena, säilitades samal ajal selle funktsionaalsuse. Kasutades klipp () käsklused tagab ka selle, et renderdatakse ainult vajalik ala, vähendades üldist töötlemiskoormust.

Korduma kippuvad küsimused Google Earthi mootori skriptide optimeerimise kohta

  1. Kuidas parandada oma GEE skriptide jõudlust?
  2. Optimeerige kasutamist filterDate(), filterBounds()ja enne töötlemist vähendage andmestiku suurust.
  3. Miks minu GEE-skripti käitamine nii kaua aega võtab?
  4. Suured andmekogumid ja keerulised arvutused võivad täitmist aeglustada. Kasutage reduce() ja clip() piirata töötlemist asjakohaste piirkondadega.
  5. Kas ma saan GEE-s töödeldavate piltide arvu vähendada?
  6. Jah, kandideerides filter() pilvede katmiseks ja filterDate() keskenduda konkreetsetele perioodidele.
  7. Kuidas ma saan skriptis indeksi arvutusi lihtsustada?
  8. Kasutage funktsiooni nagu addBands() mitme indeksi (nt NDVI, NDWI) lisamise lihtsustamiseks ühe sammuga.
  9. Kas on võimalik visualiseerida ainult olulisi kihte?
  10. Jah, keelake mittevajalikud kihid ja kasutage koos lihtsustatud visualiseerimisparameetreid Map.addLayer() parema jõudluse jaoks.

Viimased mõtted GEE skriptide optimeerimise kohta

Google Earth Engine skriptide optimeerimine hõlmab suurte andmehulkade tõhusat haldamist, filtrite varajast rakendamist ja tarbetute andmetoimingute vähendamist. Keskendumine olulistele valdkondadele, nagu filtreerimine kuupäeva ja asukoht võivad oluliselt lühendada töötlemisaega.

Lisades selliseid funktsioone nagu lisaribad ja kasutades lävimaske ebaoluliste andmete kõrvaldamiseks, saab skripti jõudlust veelgi parandada. Need tehnikad võivad täitmist sujuvamaks muuta, pakkudes kiiremaid tulemusi ja Google Earth Engine'i platvormi paremat kasutamist.

Allikad ja viited Google Earthi mootori skriptide optimeerimiseks
  1. See artikkel loodi sisu põhjal, mis põhineb ametlikul Google Earth Engine'i dokumentatsioonil, mis annab ülevaate skripti optimeerimise tehnikatest. Google Earthi mootori juhendid
  2. Täiendav teave koguti GEE kogukonna foorumist, pakkudes arutelusid ja lahendusi keerukate skriptide jõudluse parandamiseks. Google Earthi mootori kogukond
  3. Suurte andmekogumite haldamise parimatele tavadele viidati kaugseire kirjandusest ja juhenditest, mis on saadaval järgmisel lingil. NASA Maa vaatluskeskus