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
- 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
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ä.