Kuinka saada Google Earth -moottorisi JavaScript toimimaan nopeammin

Optimization

Google Earth Engine -komentosarjojen suoritusajan optimointi

Google Earth Engine (GEE) on tehokas alusta laajamittaisen paikkatiedon analysointiin. Käyttäjät kohtaavat kuitenkin usein ongelmia suoritusajan kanssa, vaikka heidän komentosarjansa näyttävätkin tavallisilta. Skripti, jonka suorittaminen kestää useita minuutteja, voi vaikuttaa tuottavuuteen ja viivästyttää oivalluksia.

Tässä tapauksessa käyttäjä on luonut yksinkertaisen komentosarjan Sentinel- ja Landsat 8 -tietojen käsittelemiseksi. Yksinkertaisuudestaan ​​huolimatta skriptin suorittaminen kestää noin 3-5 minuuttia. Sen ymmärtäminen, miksi näin tapahtuu ja miten komentosarja optimoidaan, on välttämätöntä tehokkaan tietojenkäsittelyn kannalta.

GEE-komentosarjan suorituskyky riippuu useista tekijöistä, kuten tietojen koosta, suodatuksesta ja laskennan monimutkaisuudesta. Suoritusajan lyhentäminen sisältää skriptin pullonkaulojen tunnistamisen, kuten tarpeettomat toiminnot tai suuret tietojoukot, jotka hidastavat käsittelyä.

Tämä artikkeli tutkii mahdollisia syitä hitaiden suoritusaikojen GEE:ssä ja antaa käytännön vinkkejä annetun komentosarjan optimointiin. Toteuttamalla näitä strategioita käyttäjät voivat parantaa merkittävästi paikkatietojen analysointitehtäviensä nopeutta ja suorituskykyä.

Komento Käyttöesimerkki
normalizedDifference() Tätä toimintoa käytetään indeksien, kuten NDVI, NDWI ja NDSI, laskemiseen laskemalla kahden kaistan välinen erotus jaettuna niiden summalla. Se on ominaista kaukokartoitusanalyysille, jossa tarvitaan kasvillisuuden, veden ja lumen indeksejä.
filterBounds() Suodattaa kuvakokoelman sisältämään vain kuvat, jotka leikkaavat tietyn geometrian. Tässä tapauksessa se rajoittaa satelliittidatan määritellyn kiinnostavan kohteen ympärillä olevalle alueelle, mikä tehostaa käsittelyä sulkemalla pois epäolennaiset tiedot.
filterDate() Tämä komento rajoittaa kuvakokoelman tietylle ajanjaksolle. Ongelmamme kannalta on ratkaisevan tärkeää analysoida erot saman ajanjakson välillä Sentinel- ja Landsat-aineistoissa.
addBands() Lisää uudet lasketut kaistat (kuten NDVI, NDWI ja NDSI) jokaiseen kokoelman kuvaan. Tämä on välttämätöntä useiden indeksien käyttämiseksi samaan kuvakokoelmaan luomatta erillisiä tietojoukkoja.
unmask() Täyttää peitetyt pikselit määritetyllä arvolla. Käsikirjoituksessamme sitä käytetään pysyvien vesialueiden paljastamiseen varmistaen, että tietoja käsitellään johdonmukaisesti koko alueella.
reduce() Pienentää kuvakokoelmaa käyttämällä määritettyä vähennystoimintoa, kuten ee.Reducer.percentile(). Tässä sitä käytetään pikseliarvojen 30. prosenttipisteen laskemiseen, mikä optimoi yhdistelmäkuvan luomisen.
clip() Leikkaa kuvan määritetyn kiinnostavan alueen rajoihin. Näin varmistetaan, että vain alueelle liittyvät tiedot käsitellään, mikä nopeuttaa suoritusta.
gt() Tämä komento tarkoittaa "suurempi kuin" ja sitä käytetään binäärikuvien luomiseen kynnyksen perusteella. Tässä tapauksessa se tunnistaa alueet, joilla vettä esiintyy enemmän kuin 80 %.
map() Käyttää funktiota jokaiseen kokoelman kuvaan. Esimerkissämme se käyttää addIndices-funktiota NDVI-, NDWI- ja NDSI-arvojen laskemiseen kaikissa kokoelman kuvissa, mikä virtaviivaistaa työnkulkua.

GEE-skriptien optimointi tehokkuuden parantamiseksi

Toimitetussa käsikirjoituksessa tavoitteena on poimia ja käsitellä satelliittikuvia kahdesta eri lähteestä: Sentinel ja Landsat. The alustan avulla käyttäjät voivat käyttää suuria määriä satelliittidataa ja käyttää erilaisia ​​toimintoja, kuten suodatusta, indeksointia ja visualisointia. Yksi tämän skriptin tärkeimmistä ominaisuuksista on funktio, jota käytetään tärkeiden indeksien, kuten NDVI, NDWI ja NDSI, laskemiseen. Nämä indeksit ovat tärkeitä analysoitaessa kasvillisuutta, vettä ja lumipeitettä määritellyllä alueella. Käsikirjoitus alkaa määrittämällä kiinnostava kohde ja keskittää kartan siihen annettujen koordinaattien avulla.

Skripti käyttää useita suodattimia, kuten ja , vähentääksesi käsiteltävän tiedon määrää, mikä lyhentää suoritusaikaa. Esimerkiksi, filterBounds() varmistaa, että vain kiinnostavan alueen leikkaavat kuvat otetaan mukaan filterDate() rajoittaa kuvat tietylle ajanjaksolle. Tämä on välttämätöntä suurten tietojoukkojen, kuten Sentinel- ja Landsat-kuvien, käsittelyssä, koska se minimoi laskennallisen kuormituksen. Lisäksi, pilvipeitto auttaa hylkäämään kuvat, joissa on liikaa pilviä, mikä varmistaa paremman analyysin laadun.

Yksi käsikirjoituksen tärkeä näkökohta on toiminto, joka lisää laskettuja indeksejä (NDVI, NDWI, NDSI) kuviin, jolloin ne ovat käytettävissä jatkoanalyysiä varten. Skripti sisältää myös pysyvän vesimaskin, joka käyttää JRC:n maailmanlaajuisen pintavesitietojoukon tietoja. Vesinaamari auttaa sulkemaan pois alueita, joilla on runsaasti vettä (yli 80 %), mikä muuten voisi vääristää kasvillisuus- ja lumianalyysin tuloksia. Tämä tehdään kautta ja toimintoja, joiden avulla komentosarja voi eristää alueita pikseliarvojen perusteella.

Lopuksi skripti käyttää toimii prosenttipisteen pienentäjän kanssa luodaksesi yhdistelmäkuvan, joka edustaa 30. prosenttipistettä valituista pikseliarvoista. Tämä yhdistelmäkuva leikataan sitten kiinnostavalle alueelle ja visualisoidaan kartalla käyttämällä toiminto. Visuaaliset parametrit on määritelty sekä Sentinel- että Landsat-komposiiteille, jolloin käyttäjä voi tarkastella niitä sopivilla väriasetuksella. Yhdistämällä erilaisia ​​kuvankäsittelyvaiheita, kuten suodatuksen, peittämisen ja yhdistelmäluonnin, tämä komentosarja tarjoaa tehokkaan tavan analysoida satelliittikuvia, vaikka lisäoptimointia voidaan soveltaa suoritusaikojen lyhentämiseksi.

Google Earth Enginen komentosarjan suoritusten optimointi nopeampaa käsittelyä varten

Tämä ratkaisu käyttää Google Earth Engineä (GEE) painottaen suorituskyvyn optimointia lyhentämällä tiedonhakuaikoja ja yksinkertaistamalla toimintoja. JavaScriptiä käytetään komentosarjakielenä.

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

Tehokkaan tietojenkäsittelyn käyttö GEE:lle komentosarjaviiveiden minimoimiseksi

Tämä ratkaisu integroi optimoidun tiedonkäsittelyn yhdistämällä indeksien laskelmia ja kynnysarvoja. JavaScriptiä käytetään Google Earth Enginen käsittelyyn.

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

Kaukokartoituskomentosarjojen tehokkuuden parantaminen

Google Earth Enginen (GEE) skriptien kanssa työskennellessä yksi tärkeimmistä seikoista on varmistaa, että toiminnot hoidetaan tehokkaasti. Vaikka suurten tietojoukkojen, kuten Sentinel ja Landsat, käyttö on yleistä ympäristöanalyysissä, valtava datamäärä voi hidastaa komentosarjojen suorittamista. Yksi tapa parantaa suorituskykyä on varmistaa, että vain tarvittavat tiedot käsitellään. Käyttämällä komentoja, kuten ja minimoi tietojoukon koon, mikä tehostaa laskentaa. Tiettyjen ajanjaksojen ja maantieteellisten alueiden valitseminen voi lyhentää suoritusaikaa merkittävästi.

Toinen näkökohta, joka vaikuttaa GEE-skriptin suorituskykyyn, on tietojen käsittelytapa. Komentosarjaesimerkissä käytetään funktiota tärkeiden indeksien, kuten NDVI, NDWI ja NDSI, laskemiseen. Nämä indeksit lisätään bändeinä kuvakokoelmiin, mikä mahdollistaa perusteellisemman analyysin. Kuitenkin yleinen virhe on käyttää tällaisia ​​toimintoja koko tietojoukossa ilman suodatusta ensin. On erittäin tärkeää käyttää tällaisia ​​operaatioita suodatuksen jälkeen, jotta vältetään tarpeettomat laskennat merkityksettömille tiedoille.

Visualisointi on toinen skriptin osa, jota voidaan optimoida. Liian monien kerrosten tai monimutkaisten visualisointien lisääminen voi hidastaa käsittelyaikaa. Skripti käyttää ennalta määritettyjä visuaalisia parametreja komposiittien hahmontamiseen, mutta suorituskykyä voidaan parantaa poistamalla käytöstä tietyt tasot, ellei niitä nimenomaisesti tarvita. Tämä auttaa pitämään skriptin kevyenä säilyttäen samalla sen toiminnallisuuden. Käyttämällä komennot myös varmistaa, että vain tarvittava alue renderöidään, mikä vähentää kokonaiskäsittelyn taakkaa.

  1. Kuinka voin parantaa GEE-skriptien suorituskykyä?
  2. Optimoi käyttö , ja pienennä tietojoukon kokoa ennen käsittelyä.
  3. Miksi GEE-skriptini suorittaminen kestää niin kauan?
  4. Suuret tietojoukot ja monimutkaiset laskelmat voivat hidastaa suoritusta. Käyttää ja rajoittaa käsittely asiaankuuluville alueille.
  5. Voinko vähentää GEE:ssä käsiteltyjen kuvien määrää?
  6. Kyllä, hakemalla pilvipeittoon ja keskittyä tiettyihin ajanjaksoihin.
  7. Kuinka voin yksinkertaistaa indeksilaskelmia komentosarjassani?
  8. Käytä funktiota kuten yksinkertaistaa useiden indeksien (esim. NDVI, NDWI) lisäämistä yhdessä vaiheessa.
  9. Onko mahdollista visualisoida vain olennaiset kerrokset?
  10. Kyllä, poista tarpeettomat tasot käytöstä ja käytä yksinkertaistettuja visualisointiparametreja paremman suorituskyvyn saavuttamiseksi.

Google Earth Enginen komentosarjojen optimointi edellyttää suurten tietojoukkojen tehokasta käsittelyä, suodattimien käyttöönottoa varhaisessa vaiheessa ja tarpeettomien tietotoimintojen vähentämistä. Keskittyminen olennaisiin alueisiin, kuten suodatukseen ja sijainti voi lyhentää käsittelyaikaa merkittävästi.

Sisällyttämällä toimintoja, kuten ja käyttämällä kynnysmaskeja epäolennaisen tiedon poistamiseen, komentosarjan suorituskykyä voidaan edelleen parantaa. Nämä tekniikat voivat virtaviivaistaa suoritusta ja tarjota nopeampia tuloksia ja parempaa Google Earth Engine -alustan käyttöä.

  1. Tämä artikkeli on luotu käyttämällä sisältöä, joka perustuu viralliseen Google Earth Engine -dokumentaatioon, joka tarjoaa käsityksen komentosarjojen optimointitekniikoista. Google Earth Engine -oppaat
  2. Lisätietoa kerättiin GEE-yhteisöfoorumilta, joka tarjosi keskusteluja ja ratkaisuja monimutkaisten komentosarjojen suorituskyvyn parantamiseen. Google Earth Engine -yhteisö
  3. Parhaat käytännöt suurten tietojoukkojen käsittelyyn viitattiin kaukokartoituskirjallisuudesta ja opetusohjelmista, jotka ovat saatavilla seuraavasta linkistä. NASA Earth Observatory