Taulukkomuotoiset datat helposti PostGIS-tietokantaan
Usein tietokantojen kanssa työskennellessä koneluettava tietoformaatti Comma Separated Value (.csv) on hyvin laajasti käytetty ja hyödyllinen formaatti. Usein kuitenkin sarakkeiden tietomuodot (teksti, kokonaisluku, geometria, jne.) aiheuttavat päänvaivaa käyttäjälle. Tässä tutoriaalissa näytämme, kuinka OGR-komentotyökalun avulla saadaan helposti ladattua .csv-data PostGISiin. Tällä kertaa haluamme ladata Helsinki Region Infosharen kautta julkaistun kaupungin tuottaman liikennemerkit pilottiaineistonPostGISiin.
Ensin data tutuksi: miltä se .csv-aineisto näyttääkään?
Esimerkiksi kyseisellä datasetilla on perinteiseen tapaan paljon sarakkeita, jotka sisältävät erilaisia ominaistietoja liikennemerkeistä. Sarakkeet ovat eri muodossa ja jos .csv-tiedosto avataan laskentataulukko-ohjelmalla (Excel/Libreoffice Calc tms.), se näyttäisi suurin piirtein tältä (muutama rivin osalta):
GDAL/OGR-ohjelmistokirjasto apuun ja taulukkodata PostGISiin
GDAL/OGR-työkalun avulla voidaan helposti ladata aineisto PostGISiin. GDAL/OGR on ohjelmistokirjasto, joka ei välttämättä ole nimeltään monelle tuttu, mutta käytössä se on ollut lähes kaikilla paikkatiedon kanssa toimineilla. Lue täältä, missä kaikissa paikkatieto-ohjelmissa GDAL-OGR pyörii taustalla tai liitännäisenä. Tutustu myös tukipalveluartikkelistamme, kuinka asennat ohjelmistokirjaston Windows-ympäristöön.
CSV-aineiston tuominen PostGISiin tapahtuu seuraavan komentosarjan avulla. Komennon viimeisenä parametrina AUTODETECT_TYPE=YES auttaa työkalua sananmukaisesti tunnistamaan automaattisesti tietotyyppejä aineistossa.
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=postgres dbname=gisdb password=mypassword" liikennemerkit.csv -nln liikennemerkit -oo AUTODETECT_TYPE=YES
Huomaa personalisoida oman työympäristösi mukaan ainakin user-, dbname- ja password-parametrit, jotka esittävät tietoja käyttämästäsi tietokannasta. Yllä olevan kommennon ajat samaisesta kansiosta, josta löydät aineiston. Jos tiedostosijaintien välillä liikkumisesta on aikaa, voit lukea seuraavista linkeistä, miten Linux-ympäristössä ja Windows-ympäristössä liikutaan kansioista toiseen. Windowsissa OsGeo4W shell -ohjelmiston saa auki ja ogr-työkalua voi testata csv-aineiston kanssa seuraavalla tavalla:
Tulokset
Lopputuloksena löydät aineiston haluamastasi tietokannasta. PgAdminissa data näyttäisi tältä:
Hyödyntäen psql-komentorivityökalua hallitsemaan PostGIS-tietokantaasi saisit samat tiedot esille kyselemällä taulun tietoja helposti komennolla:
\d liikennemerkit
Tämän artikkelin luontihetkellä aineisto sisälläsi seuraavat sarakkeet, joiden tietotyypit asettuivat Type-sarakkeen esittämällä tavalla. Näytönkaappaus on otettu psql-työkalusta.
Jos verrataan tietotyyppejä aineiston lataussivulstolta katsottuun taulukkoon tietotyypeistä huomataan, että tietotyypit täsmäävät aika pitkälti (huomaa, että tietoaineistoon on tullut lisää sarakkeita metadatan päivittämisen jälkeen).
Täältä voit lukea lisää GDAL/OGR:n .csv-driverista ja sen toiminnallisuuksista osana ohjelmistokirjastoa: https://gdal.org/drivers/vector/csv.html
Taulukkodatan koordinaattisarakkeet paikkatietomuotoon tietokantaan
Extrana jos haluat hyödyntää ‘x’- ja ‘y’-sarakketa ja tuottaa paikkatietosarakkeen osaksi tietokantataulua, voit tehdä sen seuraavia komentoja hyödyntäen:
-- lisätään geom_-sarake, joka on tietotyypiltään geometry
ALTER TABLE liikennemerkit
ADD COLUMN geom_ geometry;
-- hyödynnetään x- ja y-sarakkeita juuri luomamme geometry-sarakkeen populoimiseen
UPDATE liikennemerkit
SET geom_=ST_SetSRID(ST_MakePoint(x::float8, y::float8), 3878);
Mikäli PostgreSQL:n näppärä psql-komentyökalu ei ole tuttu ja haluaisit testata sitä Windows-ympäristössä, seuraavalta videolta voit katsoa, miten yllä oleva komento ajetaan sen avulla.
Huomaa myös, kuinka loppuviimein x- ja y-sarakkeet eivät sellaisinaan eli double precision -muodossa ole päteviä, mikä johtuu lähinnä siitä, että aineistoissa jotkin x- ja y-koordinaatit ovat tyhjiä tai sitten niiden merkkipituudet ovat keskenään vaihtelevia.
Lopuksi voit vielä visualisoida aineiston vaikkapa QGISissa: