GDAL/OGR

GDAL ja OGR ovat avoimen lähdekoodin ohjelmakirjastoja rasterikuvien ja vektoriaineistojen käsittelyyn.  Kirjaston lisäksi on saatavilla myös komentorivi-työkalut aineistojen käsittelemiseksi, esim. tiedostojen formaatin ja koordinaattijärjestelmien vaihtamiseen. Kirjaston GDAL haara käsittele rasteriaineistoja ja OGR vektoriaineistoja. Kirjasto tukee hyvin laajaa valikoimaa formaateista.

Kirjasto on käytettävissä kaikissa käyttöjärjestelmissä, Windows ympäristöön suosittelen OSGeo4W paketin asentamista.

GDAL/OGR käyttö

GDAL/OGR työkaluja käytetään DOS tai Linux komentoriviikkunan kautta. Aikaisempi näiden käyttökokemus ei ole kuitenkin välttämätöntä. Muutama asia kannattaa kuitenkin oppia ennen kun aloittaa GDAL/OGR:n käytön:

  • Työhakemiston vaihto ja listaus. DOS: cd ja dir. Linux: cd ja ls.
  • Hakemistopuun kopiointi
    • Windows: xcopy source destination /t /e (komento annetaan hakemistosta, johon source sisältyy)
    • Linux: find -type d -exec mkdir ../compress95/{} \; (komento annetaan hakemistosta, mistä alkaen kopio tehdään)
  • Tiedostojen kopiointi ja poisto. DOS: copy ja del. Linux: cp ja rm.

 

Metatiedot

Tiedoston metatiedon (mm. koordinaattijärjestelmän) katsomiseen sopii gdalinfo tai ogrinfo.

gdalinfo file.tif
ogrinfo -al -so file.shp

GeoTiff tiedostojen header tiedot (sisältää myös tietoa koordinaattijärjestelmästä) saa näkyviin seuraavalla komennolla:

listgeo geotif.tif

 

Koordinaattijärjestelmän vaihtaminen

Koordinaattijärjestelmän vaihtamiseen soveltuvat gdalwarp (rasteriaineistot) ja ogr2ogr (vektoriaineistot). Molemmissa työkaluissa käytetään proj4 kirjastoa, joten koordinaattijärjestelmän vaihto onnistuu samalla tavalla. Ensin määritellään t_srs muuttuja eli mihin järjestelmään halutaan aineistoa siirtää. Huomaa, että ogr2ogr-komennolle annetaan ensin tulostiedoston nimi, sitten vasta syötetiedosto! ogr2ogr -t_srs EPSG:2394 output_kk3.shp input_kkj4.shp
gdalwarp -t_srs EPSG:2393 input _kkj4.tif output_kkj3.tif

Kätevin tapa kuvata haluttua koordinaattijärjestelmää on EPSG koodi. Suomalaisten koordinaattijärjestelmien EPSG koodit ovat:

3067 ETRS-TM35FIN
3386 KKJ 0-kaista
2391 KKJ 1-kaista
2392 KKJ 2-kaista
2393 KKJ 3-kaista, YKJ
2394 KKJ 4-kaista
3387 KKJ 5-kaista

Lisää Suomen EPSG koodeja löytyy MML:n sivuilta. Kaikien EPSG koodien tietokanta.

Joskus proj4 kirjasto ei ymmärrä alkuperäisen tiedoston koordinaattijärjestelmää tai tiedosto ei sisällä tätä tietoa. Siinä tapauksessa kannattaa komennossa määritellä myös alkuperäisen aineiston koordinaattijärjestelmä -s_srs muuttujalla.

gdalwarp -s_srs EPSG:3386 -t_srs EPSG:2393 input_kkj0.tif output_kkj3.tif

Jos tiedosto ei sisällä tietoa koordinaattijärjestelmästä, sen voi määritellä a_srs muuttujalla, esimerkkejä löytyy täältä. Huomaa, että näiden komentojon tuloksena tiedostolle vain annetaan koordinaattijärjestelmän tiedot, mutta aineistoa ei muuteta koordinaattijärjestelmään.

 

Formaattimuunnokset

Rasteriaineistot

Rasteriaineistojen tiedostomuotoja voi vaihtaa gdal_translate komennolla. Luotavan tiedoston formaatin määrittelee -of muuttuja. Sen oletusarvo on GeoTiff, joten sitä ei ole pakko erikseen määritellä. Toisaalta oletusarvoisesti GeoTiff tiedosto luodaan pakkaamattomana, jos haluaa käyttää esimerkiksi LCW pakkausta, se tulisi lisätä -co muuttujan taakse.
gdal_translate input.ecw output.tif
gdal_translate -co "compress=LCW" input.ecw output.tif
gdal_translate -of ECW input.tif output.ecw


Vektoriaineistot

Vektoriaineistojen formaatin vaihtamiseen soveltuu FWToolsissa ogr2ogr komento. Tiedostomuunnosta varten tulee määritellä -f muuttuja. Oletuksena muunnokselle on ESRI shape, joten sitä ei ole pakko erikseen määritellä. MapInfo mif tai tab formaatti valitaan tiedoston nimen mukaan.
ogr2ogr output.shp input.mif
ogr2ogr -f "MapInfo File" output.tab input.shp
ogr2ogr -f "MapInfo File" output.mif input.shp

Jos samassa .tab tiedostossa on sekä pisteitä, viivoja että alueita, ne tallennetaan useampaan .shp tiedostoon. Ks. ohje.

Oletuksena Shape tiedoston String kenttien koko on 80 merkkiä, jota tarvittaessa pitennetään. Isompien paljon teksti-kenttiä sisältävien aineistojen osalta on suositeltava on lisätä komennon loppuun vielä: –lco RESIZE=YES. Silloin String ja Integer kenttien koot säätetään tarkaan sisällön mukaan.

ogr2ogr output.shp input.mif –lco RESIZE=YES

Jo olemassa olevan Shape tiedoston .dbf tiedostoa voi pienentää ogrinfo työkalulla.

ogrinfo file1.dbf -sql "RESIZE file1"

Shape tiedoston merksitö määritellään "-lco ENCODING=XX" asetuksella.

ogr2ogr output.shp input.gml -lco ENCODING=UTF-8

OGR työkaluilla voi tallentaa myös WFS rajapinnalta saatavila olevia aineistoja.

ogr2ogr -f 'ESRI Shapefile' output.shp WFS:"http://geohub.jrc.ec.europa.eu/effis/ows" layername –lco RESIZE=YES

OGR pystyy lukemaan myös OpenStreetMap projektissa käytettäviä formaatteja. Esim. halutessaan ladata omalle koneelle koko Suomen OSM aineiston, yksi helppo tapa on ladata ensin Geofabrik sivuilta Suomen aineisto pbf muodossa. Ja sitten tallentaa se ogr2ogr työkalulla esim. Shape formaattiin (tai SpatialLite tietokantaan ym).

ogr2ogr OSM_aineisto finland-latest.osm.pbf

Jos halutaan kuitenkin vain tiettyjä kohteita OSM-kannassa, sekin on mahdollista. Rajauksen tekemiseksi on hyödyllinen tutustua aineiston rakenteeseen ogrinfo työkalulla ja OpenStreetMap Map Features sivuun. Seuraavat esimerkkikomennot tallentavat Shape tiedostoon kaikki järvet ja kuntarajat.

ogr2ogr -where "natural like 'water'" fin_lakes.shp finland-latest.osm.pbf multipolygons
ogr2ogr -where "admin_level='8'" fin_municipalities.shp finland-latest.osm.pbf multipolygons

OGR työkaluja voidaan käyttää myös CSV tiedostossa olevien koordinaattien siirtämiseksi paikkatietoformaattiin. CSV tiedoston ensimmäisellä rivillä pitäisi olla kenttien nimet. Esimerkiksi CSV tiedosto (vain UTF8), jossa on koordinaatit CoordX ja CoordY nimisissä sarakkeissa voidaan muuttaa Shape formaattiin näin (GDAL 2.0 ja uudempi):

ogr2ogr output.shp input.csv -oo X_POSSIBLE_NAMES=CoordX -oo Y_POSSIBLE_NAMES=CoordY -a_srs EPSG:3067 –lco RESIZE=YES

 

3D shape > 2D shape

Joillekin ohjelmille 3D shape (Digiroad) voi olla ongelmallista. Yksi tapa 3D > 2D muutokseen on käyttää GDAL/OGR-kirjastojen mukana tulevaa ohjelmaa ogr2ogr. Esimerkiksi:
  ogr2ogr -nlt LINESTRING -f "ESRI Shapefile" New_Shapes DIGIROAD_LIIKENNE_ELEMENTTI.shp
 

Yhdistäminen

Rastereille soveltuu gdal_merge työkalu: gdal_merge -o merged.tif input1.tif input2.tif Väritaulukkoja sisältävien rasterien yhdistämisessä (esim. peruskarttalehdet) tulisi komentoon lisätä -pct, jotta väritaulukko kopioitaisiin uuteen tiedostoon. gdal_merge -o merged.tif -pct input1.tif input2.tif Vektoriaineistoille soveltuu ogr2ogr komento. Kaikkien tiedostoformaattien yhdistäminen ei ole mahdollista (esim. MapInfo formaatit, GML, katso tarkemmin formaattien omilta sivuilta), mutta ESRI shape formaatissaolevia tiedostoja voidaan yhdistää. Varmista kuitenkin, että liitettävät tiedostot ovat samantyyppisiä (point, arc, polygon ym.). Ensimmäisenä tulisi luoda uusi tiedosto (1.), johon lisätään yhdistettävät tiedostot (2). -nln muuttuja määrittele millaiselle karttatasolle kohteet lisätään.
(1) ogr2ogr file_merged.shp file1.shp
(2) ogr2ogr -update -append file_merged.shp file2.shp -nln file_merged

Leikkaaminen

Leikattaessa nelikulmaista aluetta tiedostosta tulee halutun alueen kulmakoordinaattien arvot lisätä rasteriaineistolle gdal_translate komentoon -projwin muuttujalla ja vektoriaineistoille ogr2ogr komentoon -spat muuttujalla. Huomaa, että ymin ja ymax sekä input ja output ovat eri järjestyksessä näissä komennoissa.
gdal_translate -projwin xmin ymax xmax ymin input.tif output.tif
ogr2ogr -spat xmin ymin xmax ymax output.shp input.shp

Leikkaus Shape-tiedoston avulla

Rasterin leikkaus Shape-tiedostossa määritettyjä rajoja pitkin onnistuu gdalwarp komennolla, ks ohje.

Vektoriaineiston leikkaus

ogr2ogr -clipsrc clippingLayer.shp output.shp input.shp

 

Batch files

Useamman tiedoston käsittelemiseksi samanaikaisesti tarvitaan for-looppeja (DOS, Linux) ja wildcards merkkejä (DOS, Linux).

DOS

Formaatin vaihto:
FOR %i IN (input_folder/*.tif) DO gdal_translate -of ECW %i output_folder/%~ni.ecw
FOR %i IN (input_folder/*.shp) DO ogr2ogr -f "MapInfo File" output_folder/%~ni.mif %i

FOR /R %i IN (*.tif) DO gdal_translate %i F:\compress95%~pni.jp2 -of JP2ECW -co target=95

Koordinaattijärjestelmän vaihto:

FOR %i IN (*.shp) DO ogr2ogr -s_srs EPSG:2393 -t_srs EPSG:3857 output_folder\%~ni.shp %i

Esimerkeissä huomioitava:

  • %i - muuttujan nimi, tässä voisi yhtä hyvin olla jotain muuta, esim. %file tai %karttalehti, komennon loppuosassa tulisi vain tehdä vastaavat muutokset
  • IN (*.tif) - käsiteltävien tiedostojen valinta. Tähän tarvitaan yleensä wildcards merkkejä.
  • Komennossa:
    • %i = tiedoston polku, nimi ja laajennos: input_folder/map.tif
    • %~ni = tiedoston nimi: map
    • %~pni = tiedoston polku ja nimi: input_folder/map
  • /R - myös alihakemistot käsitellään.

 

Linux

for i in *.shp; do echo ogrinfo $i -sql "CREATE SPATIAL INDEX ON ${i/.shp/}"; done

 

#!/bin/bash
for i in $(find -name '*.tif')
do
    echo $i
    gdal_translate $i ../infrared_lossless/${i/tif/jp2} -of JP2ECW -co target=0
done

 

Lisää Linux esimerkkejä löytyy tästä.