Edellisessä GRASS GIS -sovellukseen ja KuntaGML:ään keskittyneessä artikkelissa sivuttiin osittain OGC GeoPackage-formaattia. Monelle paikkatietoammattilaiselle GeoPackage on kuitenkin valitettavasti hieman tuntemattomampi paikkatietoformaatti, sillä käytössä on yhä mm. eräitä vanhoja formaatteja.
GeoPackage on Open GeoSpatial Consortiumin hallinnoima avoin formaatti paikkatietoaineistojen tallentamiseen ja siirtämiseen järjestelmästä toiseen. Suomalaisten suuhun sopii paremmin Geopaketti. Tämän paikkatietomies-artikkelin luettuasi sinulla on peruskäsitys keskeisimmistä Geopaketin ominaisuuksista.
Esittelen artikkelissa lisäksi pari SQL-skriptiä, joiden avulla voit tuunata Geopaketista vähän älykkäämmän. Skripteillä luodaan pari laukaisinta, joiden avulla Geopaketin sisälle voidaan generoida automatisoidusti erilaisia lisätietoja. Laukaisimet aktivoituvat aina kun uusi paikkatietokohde lisätään geopakettiin.
Geopaketin ominaisuuksia
Geopaketti on erittäin käyttökelpoinen formaatti. Em. väitettä voi perustella useasta eri näkökulmasta. Kenties kaikkein merkittävin ominaisuus on se, että Geopaketti soveltuu niin vektorimuotoisen kuin rasterimuotoisenkin paikkatiedon tallentamiseen. Tämä on tietyllä tapaa erittäin mielenkiintoista, sillä useat meistä ovat tottuneet tallentamaan rasterimuotoiset paikkatietoaineistot omiin ja vektorimuotoiset paikkatietoaineistot omiin formaatteihinsa.
Toinen merkittävä tekijä on se, että GeoPaketti perustuu monipuoliseen SQLite-tietokantaan. Tavallinen SQLite-tietokanta sellaisenaan ei taivu spatiaaligeometrioiden käsittelyyn, mutta Geopaketin tapauksessa SQLite-tietokanta onkin varustettu ns. SpatiaLite-liitännäisellä, joka tuo tuen binäärimuotoiselle geometriatiedolle. SpatiaLiten myötä käytettävissä ovat myös lukuisat spatiaalifunktiot.
Kiitos Geopaketin tietokantamaisuuden, voidaan Geopaketin sisälle luoda oikeista relaatiotietokannoista tuttuja toiminnallisuuksia. Tällaisia toiminnallisuuksia ovat esimerkiksi useat taulut, eri tietokantatauluista yhteen näkymään tietoja kokoavat tietokantanäkymät, taulujen välisten riippuvuuksien luominen ja tuki indekseille (esim. spatiaali-indeksi).
Verrattuna perinteiseen tietokannanhallintajärjestelmään (DBMS), Geopaketti ei tue käyttäjäkohtaisesti rajoitettuja oikeuksia. Ts. kaikki tietokantaoperaatiot ovat käyttäjän toteutettavissa, mikäli hänellä on kirjoitusoikeus Geopaketti-tiedostoon.
Muita itse havaitsemiani Geopaketin hyötyjä ovat mm. mahdollisuus käyttää pitkiä sarakeotsikkoja, mahdollisuus tallentaa tasoilla käytetyt tyylimäärittelyt Geopaketin sisälle (QGIS-paikkatietosovelluksella), helppo siirrettävyys järjestelmästä toiseen (yksi tiedosto vs. kokonainen kanta tietokantapalvelimella) ja mahdollisuus Geopaketin aineistojen käsittelyyn SQL-kyselyin.
Täydellisen listan Geopaketin ominaisuuksista voit lukea Geopaketin speksin sivuilta.
Useat paikkatietosovellukset tukevat Geopakettia
Tuki Geopaketti-formaatille on vakiona useissa paikkatietosovelluksissa. Esimerkiksi avoimen lähdekoodin paikkatietosovellus QGIS pärjää mainiosti Geopaketin kanssa. Geopaketille löytyy tuki myös paikkatietoaineistojen välisiin muunnoksiin käytettävästä GDAL-kirjastosta, paikkatietoaineistojen OGC-rajapintajulkaisun hoitavasta GeoServer-palvelimesta ja monesta muusta avoimen lähdekoodin paikkatietosovelluksesta.
Myös useimmissa kaupallisissa paikkatietosovelluksissa on nykyään hyvä tuki Geopaketille. Kaupallisista paikkatietosovelluksista ainakin ESRIn ArcMap, Pitney Powesin MapInfo ja Safe Softwaren ETL-työkalu FME osaavat vähintäänkin avata GeoPaketin.
Älyä Geopakettiin
Omasta mielestäni Geopaketin kaikkein suurin hienous on kuitenkin se, että Geopaketin sisälle on mahdollista luoda omia toiminnallisuuksia esimerkiksi ns. laukaisinten (eng. trigger) avulla. Laukaisinfunktiot ovat tietokantajärjestelmien (esim. PostgreSQL) perustoiminnallisuuksia, mutta, että sellaisen saa ympättyä myös yksittäiseen tiedostoon, on mielestäni hehkuttamisen arvoinen asia.
Demonstroitakoon tätä toiminnallisuutta yksinkertaisen esimerkin avulla. Luodaan siis pari laukaisinta, jotka tallentavat paikkatietokohteen luomisajankohdan aikaleiman, ja laskevat aluemuotoisen paikkatietokohteen pinta-alan. Laitetaan laukaisimet laukeamaan uuden paikkatietokohteen lisäämisen (INSERT-tietokantaoperaatio) yhteydessä.
Laukaisimet helpottavat mm. tiedon ylläpitoa Geopaketissa ja vähentävät käsipelissä tehtävän työn määrää. Itse olen toteuttanut laukaisinten avulla mm. pisteelle automaattisesti postinumeron hakevan toiminnallisuuden ja automaattisen naapuruussuhdeanalysoinnin (ominaisuustietojen haku puskurivyöhykkeen avulla toisesta paikkatietoaineistosta, joka tallennettu omaksi tasoksi saman Geopaketin sisälle).
Luodaan ensin tyhjä Geopaketti
Seuraavaksi esittelen SQL-kieliset skriptit, joiden avulla em. toiminnallisuudet ovat lisättävissä Geopakettiin. SQL-kielisiä komentoja Geopakettiin voi ajaa kätevästi esimerkiksi QGIS-paikkatietosovelluksen DB Manager-lisäosan avulla. Tarkoitusta varten on myös erillisiä sovelluksia, joista maininnan ansaitsee DB Browser for SQLite.
Aloitetaan demonstrointi luomalla esimerkinomainen Geopaketti QGIS-paikkatietosovelluksella. Esimerkissä käytettävä Geopaketti syntyy kätevästi QGIS:ssa Create Layer -valikon takaa löytyvällä New GeoPackage Layer -toiminnolla. Luotavan Geopaketin speksit näet oheisesta kuvasta (kuva 1).
Ja ajellaan sitten parit skriptit
Luotu Geopaketti ei vielä sisällä älyä. Älyn lisäämiseksi Geopakettiin, täytyy sen sisältöön päästä käsiksi SQL-komentojen avulla. Tämä onnistuu jo aikaisemmin mainitun DB Manager -toiminnallisuuden avulla, jonka avulla on mahdollista hyödyntää eri tietokantajärjestelmien, myös SQLite-pohjaisen GeoPaketin, tietoja QGIS-paikkatietosovelluksessa. Laukaisinten luonti toteutetaan ajamalla oheisessa kuvassa (kuva 2) nähtävät SQL-komennot Geopakettiin SQL Window -ikkunan kautta.
Mikäli joku on kiinnostunut lisäämään samat laukaisimet omaan Geopaketiinsa, löytyvät copy-paste menetelmän avulla hyödynnettävissä olevat komennot oheisesta tekstilaatikosta. Skriptissä käytettävät Geopakettikohtaiset määritteet (mm. geometriasarakkeen nimi ja pääavain) tulee luonnollisesti muuttaa omaa Geopakettia vastaaviksi. Tämän suuremmin en tässä kuitenkaan syvenny SQL-komentoihin.
-- Luodaan laukaisin, joka tallentaa aikaleiman kohdetta lisättäessä CREATE TRIGGER tallenna_aikaleima AFTER INSERT ON geopaketti BEGIN UPDATE geopaketti SET aikaleima = STRFTIME ('%Y-%m-%d %H:%M:%f', 'NOW') WHERE fid = NEW.fid; END; -- Luodaan laukaisin, joka laskee pinta-alan kohdetta lisättäessä CREATE TRIGGER laske_pinta_ala AFTER INSERT ON geopaketti BEGIN UPDATE geopaketti SET pinta_ala = ROUND (ST_Area (geometry), 2) WHERE fid = NEW.fid; END;
Ja sitten testaillaan
Ja täytyyhän toiminnallisuutta testata, joten digitoidaan malliksi muutama rakennus, ja katsotaan millaisia ominaisuustietoja Geopakettiin luodut laukaisimet saavat aikaiseksi. Tässä esimerkissä (kuva 3) on digitoitu muutama Juankosken ruukkialueen rakennus. Taustakarttana on käytetty Maanmittauslaitoksen taustakarttasarjaa, jota on suorakäytetty Kapsi Internet-käyttäjät ry:n tuottamasta WMS-palvelusta.
Ja kyllä, laukaisimet tallentavat aikaleiman ja laskevat aluemuotoisen paikkatietokohteen pinta-alan automaattisesti uuden kohteen luonnin yhteydessä. Nämä toiminnot tapahtuvat silloin, kun käyttäjä tallentaa editoinnit Geopakettiin (tallennuksen yhteydessä Geopakettiin suoritetaan INSERT-tietokantaoperaatio jolloin laukaisimet laukeavat), joten kohteita luodessa em. kentät voi jättää tyhjäksi.
Mikäli Geopaketista haluaisi vielä älykkäämmän, voisi pakettiin lisätä vielä laukaisimet, jotka laukeavat myös kohdetta muutettaessa (UPDATE-tietokantaoperaatio).