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 Google Earth Engine (GEE) 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 normalisoitu ero() 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 filterDate() ja filterBounds(), 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, suodattaa pilvipeitto auttaa hylkäämään kuvat, joissa on liikaa pilviä, mikä varmistaa paremman analyysin laadun.
Yksi käsikirjoituksen tärkeä näkökohta on addBands() 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 gt() ja paljastaa() toimintoja, joiden avulla komentosarja voi eristää alueita pikseliarvojen perusteella.
Lopuksi skripti käyttää vähentää() 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ä clip() 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 filterBounds() ja suodatinpäivämäärä() 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ä clip() komennot myös varmistaa, että vain tarvittava alue renderöidään, mikä vähentää kokonaiskäsittelyn taakkaa.
Usein kysyttyjä kysymyksiä Google Earth Engine -komentosarjojen optimoinnista
- Kuinka voin parantaa GEE-skriptien suorituskykyä?
- Optimoi käyttö filterDate(), filterBounds()ja pienennä tietojoukon kokoa ennen käsittelyä.
- Miksi GEE-skriptini suorittaminen kestää niin kauan?
- Suuret tietojoukot ja monimutkaiset laskelmat voivat hidastaa suoritusta. Käyttää reduce() ja clip() rajoittaa käsittely asiaankuuluville alueille.
- Voinko vähentää GEE:ssä käsiteltyjen kuvien määrää?
- Kyllä, hakemalla filter() pilvipeittoon ja filterDate() keskittyä tiettyihin ajanjaksoihin.
- Kuinka voin yksinkertaistaa indeksilaskelmia komentosarjassani?
- Käytä funktiota kuten addBands() yksinkertaistaa useiden indeksien (esim. NDVI, NDWI) lisäämistä yhdessä vaiheessa.
- Onko mahdollista visualisoida vain olennaiset kerrokset?
- Kyllä, poista tarpeettomat tasot käytöstä ja käytä yksinkertaistettuja visualisointiparametreja Map.addLayer() paremman suorituskyvyn saavuttamiseksi.
Viimeisiä ajatuksia GEE-komentosarjojen optimoinnista
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 päivämäärä ja sijainti voi lyhentää käsittelyaikaa merkittävästi.
Sisällyttämällä toimintoja, kuten addBands 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öä.
Lähteet ja viitteet Google Earth Engine -komentosarjojen optimointiin
- 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
- Lisätietoa kerättiin GEE-yhteisöfoorumilta, joka tarjosi keskusteluja ja ratkaisuja monimutkaisten komentosarjojen suorituskyvyn parantamiseen. Google Earth Engine -yhteisö
- Parhaat käytännöt suurten tietojoukkojen käsittelyyn viitattiin kaukokartoituskirjallisuudesta ja opetusohjelmista, jotka ovat saatavilla seuraavasta linkistä. NASA Earth Observatory