-
Virtuaalirasterit
Virtuaalirasterit
Virtuaalirasterit ovat hyödyllinen GDAL-konsepti suurten rasteriaineistojen hallintaan, kun aineisto on jaettu toisiaan leikkaamattomiin karttalehtiin. Virtuaalirasterit eivät sen sijaan sovellu esimerkiksi aikasarjojen tai päällekkäisten rasterien, kuten kaukokartoitusruutujen, hallintaan.
Teknisesti virtuaalirasteri on vain pieni xml-tiedosto, joka kertoo GDAL:lle, missä varsinaiset datatiedostot sijaitsevat, mutta käyttäjän näkökulmasta virtuaalirastereita voidaan käsitellä pitkälti kuten mitä tahansa muuta rasterimuotoa. Virtuaalirasterit voivat sisältää rasteridataa missä tahansa GDAL:n tukemassa tiedostomuodossa. Virtuaalirasterit ovat hyödyllisiä, koska niiden avulla suuria aineistoja voidaan käsitellä ikään kuin ne olisivat yksi tiedosto, jolloin oikeiden tiedostojen etsiminen ei ole tarpeen.
Esimerkiksi Maanmittauslaitoksen 2 m:n ja 10 m:n korkeusmallit ovat saatavilla Roihussa. Nämä aineistot on jaettu useisiin tif-tiedostoihin (karttalehtiin), ja jos haluaisimme esimerkiksi laskea vyöhyketilastoja alueille, jotka sijaitsevat eri puolilla Suomea, meidän pitäisi jotenkin selvittää, mikä tiedosto kattaa minkäkin alueen, ja laskea tilastot oikeasta tiedostosta. Lisähaasteita syntyisi, jos alue, jolle haluamme laskea tilastoja, sattuu sijaitsemaan kahden tai useamman karttalehden rajalla. Samankaltaisia reunaefekteihin liittyviä ongelmia syntyisi esimerkiksi käytettäessä fokustoimintoja, joissa tarvitaan myös ympäröivien tiedostojen tietoja. Nämä ongelmat voidaan helposti välttää luomalla koko tutkimusalueelle virtuaalirasteri, jolloin GDAL huolehtii automaattisesti edellä mainituista tilanteista.
Virtuaalirastereita on mahdollista käyttää myös niin, että vain pieni xml-tiedosto tallennetaan paikallisesti ja suuret rasteritiedostot sijaitsevat Altaassa, Amazon S3:ssa, julkisesti palvelimella tai missä tahansa muussa GDAL:n virtuaaliohjainten tukemassa paikassa. Data siirretään paikallisesti vain siltä alueelta ja sillä zoomaustasolla, jota pyydetään, kun virtuaalirasteri avataan. Parhaiten toimiva tiedostomuoto rasteridatan tallentamiseen etäpalveluun on Cloud optimized GeoTIFF, mutta myös muut muodot ovat mahdollisia.
Virtuaalirasterien käyttö
Virtuaalirastereita tukevat kaikki GDAL-pohjaiset työkalut, mukaan lukien Pythonin ja R:n paikkatietopaketit, ArcGIS, FME, GrassGIS, MapInfo, QGIS ja SagaGIS. Lisäksi ArcGIS:llä ja MapInfolla on kummallakin myös oma GDAL:n virtuaalirasteria muistuttava virtuaalirasterimuotonsa.
Vain osan suuren virtuaalirasterin lukeminen bboxin avulla
Virtuaalirasterien tehokkaan käytön avain on usein tuki sille, että suuresta virtuaalirasterista luetaan vain osa. Tämä onnistuu sekä R:llä että Pythonilla; monissa muissa työkaluissa rajaus täytyy tehdä erillisenä vaiheena ja tallentaa rajattu data tiedostoon.
GDAL:lla on helppo rajata pieni osa suuresta virtuaalirasterista:
gdal_translate -projwin 614500 6668500 644500 6640500 test.vrt test_clip.tif
R:
Python:
import rasterio
from rasterio.windows import from_bounds
vrt_path = "test.vrt"
with rasterio.open(vrt_path) as src:
rst = src.read(window=from_bounds(614500, 6640500, 644500, 6668500, src.transform))
Analyysin suorittaminen siten, että vain osa virtuaalirasterista luetaan
On mahdollista työskennellä erittäin suurten virtuaalirasterien kanssa silloin, kun analyysin ei tarvitse tuottaa samankokoista rasteritulosta. Hyvä esimerkki tästä on vyöhyketilastojen laskeminen polygonialueille, jotka ovat hajallaan laajalla alueella; katso esimerkki CSC:n koulutuksen GitHubista. Tässä tapauksessa rasteridataa luetaan vain niiltä alueilta, jotka menevät päällekkäin polygonien kanssa.
Suurten virtuaalirasterien visuaalinen käyttö
On hyvä huomata, että vaikka koko Suomen kattavan 2 m:n korkeusmallin analysointi perusmuotoisella .vrt-tiedostolla on supertietokoneessa täysin mahdollista, datan tarkastelu esimerkiksi QGIS:llä ei ole käytännöllistä näin suurelle aineistolle ilman lisäoptimointia. Jos haluat tarkastella suurta virtuaalirasteria helposti, sinun täytyy tehdä muutama asia:
- Luo yleiskatselutasot virtuaalirasterillesi
gdaladdo-komennolla. Kannattaa huolehtia siitä, etteivät yleiskatselutasot ole niin suuria, että niistä itsestään tulee valtavan suuri tiedosto. - Jos virtuaalirasterisi on todella suuri, on järkevää luoda hierarkkinen virtuaalirasterirakenne, jossa ylimmän tason virtuaalirasteri viittaa pienempiin virtuaalirastereihin, jotka puolestaan viittaavat vielä pienempiin virtuaalirastereihin ja niin edelleen, kunnes alin virtuaalirasteri viittaa varsinaisiin tiedostoihin. Tämän lähestymistavan syy on se, että muuten myös käytettävistä yleiskatselutasoista tulee todella suuria. Huomaa, että tällaisen hierarkkisen rakenteen käyttö voi aiheuttaa joitakin artefakteja data-analyysissä, joten sitä kannattaa käyttää vain visualisointitarkoituksiin.
- Laske tilastot valmiiksi virtuaalirastereillesi ja lähdetiedostoillesi. Tämä nopeuttaa tiedostojen avaamista esimerkiksi QGIS:ssä. QGIS:n täytyy ottaa aineistosta näytteitä minimi- ja maksimiarvojen määrittämiseksi, jotta väriskaala voidaan asettaa oikein, ja tämä vie aikaa suurilla virtuaalirastereilla. Tämän välttämiseksi voit laskea tilastot etukäteen erilliseen XML-tiedostoon komennolla
gdalinfo --stats. - Hyvä niksi QGIS:ssä suurten rasterien kanssa työskenneltäessä on ottaa rasterityökalupalkki käyttöön (View->Toolbars->Raster Toolbar). Sen avulla voit helposti säätää väriskaalaa näytöllä näkyvän alueen mukaan, jolloin kontrasti pysyy hyvänä zoomaustasosta riippumatta.
- QGIS näyttää käsittelevän suuria aineistoja varsin hyvin, kun edellä mainitut vaiheet on tehty. Jopa koko Suomen 2 m:n korkeusmallilla zoomaus ja kartan siirtäminen ovat melko sujuvia.
Virtuaalirasterien luominen
Seuraavat työkalut tukevat virtuaalirasterien luomista:
- GDAL gdalbuildvrt komentorivityökalu.
- GDAL gdal_translate STAC-haulla
- Pythonissa ja R:ssä on kääreet GDAL:n gdalbuildvrt-työkalulle; pidempi esimerkki R:lle löytyy StackOverflow-vastauksesta.
- QGIS, GrassGIS ja SagaGIS tarjoavat graafisen käyttöliittymän gdalbuildvrt-työkalulle
- lidR tukee lidar-data-analyysin tulosten kirjoittamista suoraan virtuaalirasteriksi
Supertietokoneissa glalbuildvrt sisältyy kaikkiin GDAL:n sisältäviin moduuleihin, Pythonin BuildVRT geoconda -moduuliin, QGIS QGIS -moduuliin sekä R:n terra ja lidR r-env -moduuliin.
Virtuaalirasterin luominen GDAL:n gdalbuildvrt-työkalulla
Jos data on jaettu alikansioihin, helpoin vaihtoehto on luoda virtuaalirasteri syötetiedostoluettelon avulla:
gdalbuildvrt -input_file_list file_list.txt virtual_raster.vrt
Katso lisäasetukset gdalbuildvrt-dokumentaatiosta, esimerkiksi no-data-arvon asettamista varten.
Tiedostoluettelon luominen gdalbuildvrt:lle
Tiedostoluettelon tulisi sisältää mieluiten täydet polut, mutta paikallisille tiedostoille voidaan käyttää myös suhteellisia polkuja.
Linux
find /appl/data/geo/mml/dem2m/ -name "*.**tif**" > file_list.txt
Windows
dir \data\dem2m\*.**tif** /S /B > file_list.txt
Rasteritiedostot Altaassa / jossakin muussa S3-palvelussa
Jos teet tämän supertietokoneella, lataa allas-moduuli.
Listaa tiedostonimet siinä muodossa kuin ne ovat ämpärissä käyttäen rclonea tai jotakin muuta työkalua:
rclone lsf --include '*.**tif**' allas:<your_bucket_name > file_list.txt
Lisää seuraavaksi tiedostoluetteloon täydet polut siinä muodossa kuin GDAL niitä vaatii käyttäen vsicurl-, vsis3- tai vsiswift-ajureita. Katso pidemmät selitykset GDAL-ajureista ja Altaasta CSC:n GDAL-sivulta.
sed -i -e 's-^-/**vsicurl**/https://a3s.fi/<your_bucket_name>/-' file_list.txt
sed -i -e 's-^-/**vsis3**/<your_bucket_name>/-' file_list.txt
sed -i -e 's-^-/**vsiswift**/<your_bucket_name>/-' file_list.txt
Määritä tunnistetietosi GDAL:lle ennen kuin suoritat gdalbuildvrt-komennon.
Virtuaalirasterin luominen STAC-haun tuloksista
STAC (Spatio-Temporal Asset Catalog) on tapa kuvata (rasteri)aineistoja siten, että dataa voidaan hakea ajan ja sijainnin perusteella. Esimerkiksi Paituli STAC sisältää useita suomalaisia aineistoja ja selittää STAC-käsitteitä tarkemmin.
GDAL tukee STAC-hakua ja virtuaalirasterien luomista hakutulosten perusteella.
Esimerkiksi seuraava komento luo virtuaalirasterin Paituli STACin hakutulosten perusteella. Kysely hakee tiedostoja corine_land_cover_at_geocubes-kokoelmasta määritellyllä aikavälillä ja sijainnilla (bbox) käyttäen Assetteja (=tiedostoja), joiden nimi on COG.
Linuxissa ja Macissa:
gdal_translate "STACIT:\"https://paituli.csc.fi/geoserver/ogc/stac/v1/search?collections=corine_land_cover_at_geocubes&datetime=2017-01-05/2019-02-14&bbox=19.5,61.5,28.7,63.0\":asset=COG" -of VRT corine.vrt
Windowsissa (lisää ^ ennen &-merkkejä):
gdal_translate "STACIT:\"https://paituli.csc.fi/geoserver/ogc/stac/v1/search?collections=corine_land_cover_at_geocubes^&datetime=2017-01-05/2019-02-14^&bbox=19.5,61.5,28.7,63.0\":asset=COG" -of VRT corine.vrt
Huomaa, että GDAL poistaa virtuaalirasterista Assetit, jotka ovat kokonaan uudempien Assettien peitossa. Esimerkiksi Paituli STACissa CORINE-dataa on saatavilla vuosilta 2012 ja 2018. Jos yllä olevaa hakua muutetaan kattamaan myös vuosi 2012, STAC-haku löytäisi myös CORINE 2012 -Itemit, mutta niitä ei silti sisällytettäisi luotuun VRT:hen. Jos vuoden 2012 data tarvitaan virtuaalirasteriin, aikaväliä täytyy säätää niin, ettei vuosi 2018 sisälly siihen.