ogc geopackage paikkatietomies

Geopaketti – ihan älytön paikkatietoformaatti

Edellisessä GRASS GIS -paikkatietosovellukseen ja KuntaGML:ään keskittyneessä artikkelissa sivuttiin osittain OGC GeoPackage-formaattia. Monelle paikkatietoammattilaiselle GeoPackage on kuitenkin hieman tuntemattomampi paikkatietoformaatti, sillä käytössä on mm. ESRIn ja Pitney Bowesin järjestelmissä käytettäviä formaatteja.

GeoPackage on Open GeoSpatial Consortiumin hallinnoima avoin formaatti paikkatietoaineistojen tallentamiseen ja siirtämiseen järjestelmästä toiseen. GeoPackagen suomenkielinen käännös on Geopaketti, joten käytettäköön GeoPackagesta jatkossa sitä ilmaisua. 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.

Geopaketti soveltuu niin vektorimuotoisen kuin rasterimuotoisenkin paikkatiedon tallentamiseen.

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

Geopaketti perustuu monipuoliseen SQLite-tietokantaan.

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

Luodaan pari laukaisinta, jotka tallentavat paikkatietokohteen luomisajankohdan aikaleiman, ja laskevat aluemuotoisen paikkatietokohteen pinta-alan.

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

paikkatietomies geopaketti
Kuva 1: Luodaan tyhjä Geopaketti QGIS-paikkatietosovelluksen New GeoPackage -toiminnon avulla.

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.

paikkatietomies laukaisinten luonti
Kuva 2: Laukaisimet lisätään Geopakettiin SQL-kielisten komentojen avulla. SQL-komennot voidaan suorittaa hyödyntämällä QGIS-paikkatietosovelluksen DB Manager -toiminnallisuutta.

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.

paikkatietomies laukaisinten testailua
Kuva 3: Geopakettiin lisättyjen laukaisinten toimintojen esittelyä QGIS-paikkatietovelluksen avulla

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

Onko sinulla kokemuksia Geopaketin käytöstä? Mikäli on, niin kerro kokemuksistasi kommentoimalla artikkelia.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *