Kuten moni paikkatietoaineistojen kanssa työskennellyt ehkä tietääkin, on paikkatietoaineistoilla sen sata erilaista formaattia (ellei enemmänkin?). Sopiva formaatti riippuu pitkälti siitä millaisilla työkaluilla paikkatietoaineistoja käsitellään ja siitä, onko kyseessä aineisto vektori- vai rasterimuodossa. Mitään varsinaista standardia alalla ei valitettavasti ole ellei OCG:n GeoPackagea halua mieltää sellaiseksi. Onneksi formaatteja voidaan muuttaa toiseen GDAL:n avulla.
Formaattien moninaisuus on osaltaan seurausta siitä, että jokainen ohjelmistovalmistaja on halunnut luoda oman, omassa ympäristössään parhaiten toimivan formaatin. Tämä ajattelutapa on erinomainen niin kauan kuin työskennellään samassa tietojärjestelmässä. Jossakin vaiheessa tulee kuitenkin tarve siirtää aineistoja toiseen tietojärjestelmään jolloin tällainen ajattelutapa ei enää lämmitä mieltä.
Paikkatietomaailman monenlaiset formaatit
Varsin yleisesti käytössä olevia tiedostopohjaisia vektoriformaatteja ovat mm. ESRI:n paikkatietoratkaisuissa käytössä oleva ESRI shapefile ja MapInfo-järjestelmien käyttämä MapInfo TAB-formaatti. CAD-maailmassa paikkatietoaineistoja voidaan tallentaa käytettävästä CAD-sovelluksesta riippuen esimerkiksi AutoCAD:n DWG-formaattiin tai Bentley MicroStation -järjestelmän tapauksessa DGN-formaattiin.
Tiedostojen lisäksi vektorimuotoista paikkatietoa voidaan säilöä myös tietokannoissa. Yleisimpiä paikkatietojen säilytykseen ja analysointiin käytettäviä tietokantajärjestelmiä ovat mm. Oracle Spatial, ArcSDE, Microsoft SQL Server, PostgreSQL/PostGIS ja MySQL.
Muunnokset tehokkaasti ogr2ogr-työkalulla
Mutta mikä neuvoksi, jos halutaan muuttaa aineistoja eri formaatista toiseen? Taikasana eri formaattien muodostamassa suossa tarpomiseen on ogr2ogr-komentorivisovellus, joka on osa ETL-työkaluksi usein miellettävää GDAL-kirjastoa. GDAL-kirjastoa käytetään lukuisissa paikkatieto-ohjelmistoissa, mutta sitä voidaan käyttää myös suoraan käyttöjärjestelmän komentoriviltä.
Käytettävyys komentoriviltä on erityisen hyödyllinen silloin, kun käsiteltävänä on suuri määrä tiedostoja. Windows-käyttöjärjestelmissä komentorivi löytyy nimellä cmd.exe (Suorita/Run -komento Käynnistä-valikosta), macOS-käyttöjärjestelmistä nimellä Terminal.app (Spotlight-hakuun sana Terminal) ja Linuxista Dash-valikosta nimellä Terminal (Dash-valikon hakukenttään sana Terminal). Tässä artikkelissa käytetyt esimerkit on tehty Windows-ympäristössä.
Esimerkkitapaus 1: MapInfo TAB-formaatista PostGIS-tietokantaan
Monessa organisaatiossa käytetään MapInfo-paikkatietojärjestelmää, niin myös nykyisen kunta-alan työnantajani palveluksessa. Tästä tarpeesta johtuen olen joutunut pähkäilemään kuinka MapInfo-paikkatietojärjestelmässä käytettävä TAB-tiedosto saadaan vietyä helposti PostGIS-tietokantaan, jota itse käytän mieluiten paikkatietoaineistojen analysoinnissa ja säilönnässä. Helpoiten se onnistuu seuraavalla komennolla:
ogr2ogr -lco "SCHEMA=skeema_tietokannassa" -lco "GEOMETRY_NAME=geometriakentän_nimi" -f PostgreSQL "PG:host=tietokantapalvelimen_osoite port=tietokantapalvelimen_portti user=käyttäjätunnus password=salasana dbname=tietokannan_nimi" TAB_tiedoston_nimi.TAB -nlt GEOMETRY
Yllä oleva komento on erityisen hyödyllinen, sillä esimerkiksi QGIS-järjestelmässä avattu TAB-tiedosto ei tallennu ongelmitta PostGIS-tietokantaan DB Manager -lisäosan avulla, vaan kantaan vietävä aineisto tulee tallentaa ensiksi johonkin muuhun formaattiin. Tästä taas aiheutuu mm. lisätyötä ja joissain tapauksissa tarve myös sarakeotsikoiden pituuksien jälkikäteen tehtävälle korjaamiselle tietokannassa. Ei missään nimessä 2010-luvun meininkiä. Lihavoidut kohdat omilla spekseillä korvaamalla, hyödynnät esimerkkiäni myös omassa toiminnassasi.
Esimerkkitapaus 2: PostGIS:stä MapInfo TAB-formaattiin
Ja koska suurin osa organisaatiossani käyttää yhä MapInfo-järjestelmää, niin muunnos PostGIS:stä MapInfo TAB-tiedostoksi täytyy myös onnistua ongelmitta. Se onnistuu seuraavalla komennolla:
ogr2ogr -f "MapInfo File" TAB_tiedoston_nimi.TAB PG:"host=tietokantapalvelimen_osoite port=tietokantapalvelimen_portti user=käyttäjätunnus password=salasana dbname=tietokannan_nimi" -sql "SELECT * FROM skeema_postgis_tietokannassa.taulu_postgis_tietokannassa"
Yllä olevalla ogr2ogr-komennolla kirjoittaa TAB-tiedoston halutulla nimellä. TAB-tiedoston sisällöksi valitaan kaikki sisältö siitä taulusta, jonka käyttäjä on määritellyt lähdeaineistoksi. Tarvittaessa TAB-tiedoston sisältöä voidaan rajata SQL-kielen muotoon kirjoitetuilla rajauksilla.
Aineistoja voidaan käsitellä muunnoksen yhteydessä
Ogr2ogr-sovelluksella voidaan tehdä paljon muutakin kuin ainoastaan muuttaa paikkatietoaineistoja formaamista toiseen. Ogr2ogr:n avulla voidaan esimerkiksi projisoida aineistoja koordinaatistosta toiseen, suodattaa ja valita käsiteltäviä kohteita ja muuttaa kohteiden tietotyyppejä. Perusajatus ogr2ogr:llä komentorivillä operoidessa on se, että komentolausekkeessa määritellään vähintään seuraavat kolme asiaa:
- Tulosaineiston formaatti ja sen luomiseen liittyvät parametrit (esimerkiksi tietokantayhteyden määritykset)
- Mahdolliset käsittelyssä käytettävät parametrit (esimerkiksi projisoinnin määritykset)
- Lähtöaineiston formaatti ja sen lukemiseen liittyvät parametrit
Itse olen mieltynyt erityisesti ogr2ogr:n tarjoamaan projisointimahdollisuuteen aineistoja vietäessä/tuotaessa ja siihen, että voin suodattaa pois metatietoja sisältäviä sarakkeita tietokannasta irroitettavista tauluista. Erityisen käytännölliseksi olen havainnyt myös mahdollisuuden hyödyntää tietokannan toimintoja (esim. PostGIS:n spatiaalifunktiot ja liitokset eri taulujen sisällöistä) irroitettaessa aineistoja tietokannasta tiedostomuotoon.
Esimerkkitapaus 3: PostGIS:stä SpatiaLite-muotoon tietosisältöä suodattaen ja projisoiden
ogr2ogr -s_srs EPSG:3878 -t_srs EPSG:3067 -f "SQLite" SpatiaLite_tiedoston_nimi.sqlite PG:"host=tietokantapalvelimen_osoite port=tietokantapalvelimen_portti
user=käyttäjätunnus password=salasana dbname=tietokannan_nimi" -dsco SPATIALITE=yes -lco SPATIAL_INDEX=yes -sql "SELECT sarake1,sarake2,sarakeN FROM skeema_postgis_tietokannassa.taulu_postgis_tietokannassa"
Yllä olevalla komento tallentaa PostGIS-tietokannasta valitut sarakkeet SpatiaLite-tiedostoksi tehden samalla projisoinnin kahden eri koordinaattijärjestelmän (ETRS89-GK-24:n ja ETRS89-TM35FIN:n) välillä. Komento on erityisen hyödyllinen silloin, kun haluan irrottaa joitakin osia tietokantataulun sisällöstä johonkin tiedostomuotoon (esimerkissä käytetään SpatiaLite-muotoa) tehden samalla projisoinnin.