Katsaus avoimen datan palveluihin

Yleistä

Avoimen datan ideana on tarjota julkiseen käyttöön tietoaineistoja, joita hyödyntämällä sovelluskehittäjät voivat kehittää palveluita ja sovelluksia jotka hyödyntävät kyseisiä aineistoja joko sellaisenaan tai tyypillisemmin yhdistelemällä eri aineistoja ja “rikastamalla” näin saatavaa tietoa paremmin hyödynnettävään muotoon.

Tässä postauksessa on tarkoituksena tutustua verkossa tarjolla oleviin julkisiin rajapintoihin, jotka tarjoavat käyttöön avoimen datan tietopalveluita. Postauksessa myös hahmotellaan pieni sovellus, joka hyödyntää useampaa avointa rajapintaa yhdistämällä näiden tietoja toiminnalliseksi kokonaisuudeksi.

Avoimen datan palvelujen kartoitusta

Avoimen datan palveluita löytyy netistä hakemalla. Seuraavassa esitellään muutamia mahdollisia tietolähteitä.

Suomalainen erityisesti julkisen hallinnon tarjoamien palveluiden esittelysivusto www.avoindata.fi esittelee yleisesti saatavilla olevia palveluita ja palvelut on kategorisoitu palvelutyyppien mukaisesti. Palvelussa esitellään erityisesti kaupunkien, kuntien, yliopistojen ja valtion virastojen tarjoamia palveluita, kuten kaupunkien karttapalveluita, tieverkkoon liittyvään tietoa, liikennetietoa yms. Tämä sivusto tarjoaa hyvän mahdollisuuden löytää sovelluksen/palvelun pohjalle karttapohjan sekä mahdollisesti jotain melko paikallisesti hyödynnettävää tietoa, kuten vaikkapa Tampereen kaupungin luontopolkurastit tai Tampereen kaupungin linja-autoliikenteen aikataulut.

Toinen hyvä paikka rajapintojen hakemiseen on http://apisuomi.fi/. Sivustolla listataan ja esitellään ilmaisia rajapintoja laidasta laitaan.

Säätietoja tarjoaa Suomessa Ilmatieteen laitos. Palvelu on maksuton, mutta vaatii rekisteröitymisen. Tietoaineistoja on hyvin paljon erilaisia (http://ilmatieteenlaitos.fi/avoin-data-avattavat-aineistot) mutta esimerkiksi säähavainnot saa kysyttyä vuodesta 2010 alkaen 10 minuutin tarkuudella.

Hieman eri tyyppistä avointa dataa on avannut Trafi, joka tarjoaa 820 Mt kokoisen CSV -tiedoston ajoneuvodatasta. Kyseessä ei siis ole varsinainen online-palvelu avoimelle datalle, mutta eräänlainen avoin tietopalvelu tämäkin. http://www.trafi.fi/tietopalvelut/avoin_data

Tilastokeskus tarjoaa erilaista tilastotietoa näppärästi esim. postinumerolla haettavaksi. Tietoa löytyy muun muassa väestön ikärakenteesta alueittain. Tilastokeskus tarjoaa tiedot ns. PX-Web API -rajapinnan kautta joka mahdollistaa monipuliset kyselyt tilastokeskuksen avoimeen tietokantaan. Palvelupyynnön vastaus on JSON-formaatissa.

Liikennevirasto tuottaa avointa dataa liikenteestä ja tiestöstä. Saatavilla on esimerkiksi kelikameroiden kuvat (https://github.com/finnishtransportagency/digitraffic/wiki/Kelikameroiden%20esiasetukset).

http://www.liikennevirasto.fi/avoindata/palvelut

Patentti—ja rekisterihallitus PRH tarjoaa avoimena datana mm. yritystiedot. (http://avoindata.prh.fi/)

Paikkatietoon liittyvät palvelutyypit WMS ja WFS

Kartta-aineistot tuotetaan tyypillisesti ns. Web Map Service (WMS) -tyyppisenä palveluna. Ideana on, että palvelu toteuttaa WMS -rajapinnan ja tarjoaa rajapintaa käyttävälle mahdollisuuden kysyä “kartan palasia” kuvatiedostoina. Palvelu tarjoaa karttatiedon esim. TIFF- kuvaformaatissa. Esimerkki tällaisesta palvelusta on Tampereen kantakartta (https://www.avoindata.fi/data/fi/dataset/tampereen-kantakartta) joka sisältää tietoja mm. kiinteistöistä, tiestöstä ja korkeusasemista. Aineisto päivittyy jatkuvasti mm. rakennuslupien kautta.

https://en.wikipedia.org/wiki/Web_Map_Service

WFS eli Web Feature Service -tyyppiset palvelut tarjoavat puolestaan sijaintitietoon nojautuvaa muuta dataa. WFS -palvelurajapinta voi sisältää toteutuksen datan hakemiseen, lisäämiseen, päivittämiseen ja poistamiseen (Transactional WFS, WFS-T). Avoimen datan palveluissa kyseessä on kuitenkin yleensä vain ns. Basic WFS -palvelutoteutus joka tarjoaa pelkät hakupalvelut tietyn datan hakemiseen. Esimerkki WFS -palvelusta on Tampereen pelikentät -palvelu (https://www.avoindata.fi/data/fi/dataset/tampereen-pelikentat).

https://en.wikipedia.org/wiki/Web_Feature_Service

Palvelujen palauttamat tietoformaatit

Monet avoimen datan palvelut palauttavat dataa tekstuaalisessa muodossa, kuten XML- tai JSON -formaatissa. Tämä formaatti on helposti hyödynnettävissä ohjelmallisesti ja kätevä erityisesti ns. onlinetoiminnallisuudessa, jossa tietoja haetaan sitä mukaa kuin tarvitaan, esim. sijainnin muuttuessa.

Karttatieto palautuu WMS-palveluista kuvatiedostoina, kuten edellä kuvattiiin. Sovelluksen/palvelun tehtäväksi jää kuvan esittäminen ja kuvatiedon päällä esitettävän lisätiedon hakeminen ja esittäminen.

Jotkin palveluntarjoajat tarjoavat datan käyttöön tiedostomuodossa. Esim. Trafin tarjoama yli 800 Mt kokoinen CSV -tiedosto on eräänlainen tietolähde, vaikka se ei olekaan palvelumuodossa. Mikäli tietolähde on CSV -muodossa, sovelluskehittäjä voisi periaatteessa tallentaa tiedot helpohkosti tietokantaan ja hyödyntää tietoja sitten omassa sovelluksessa tietokannan avulla. Tällöin on kuitenkin huomattava ainakin kaksi seikkaa: aineisto ei pysy ajan tasalla itsestään vaan vaatii sovelluskehittäjän manuaalisia tai automatisoituja toimia aineiston päivittämiseksi. Toinen seikka on tekijänoikeudelliset seikat; kannattaa varmistaa että tietojen “uudelleentallennus” sekä hyödyntäminen oman palvelun kautta on sallittua. Kyseessähän on tavallaan palveluntarjoajan tietosisällön uudelleen tarjoaminen.

Sovellus, joka yhdistää usean avoimen datalähteen tietoja

Suunnitellaan seuraavaksi jokin sovellus, joka käyttää avoimen datan lähteitä. Näin saamme hieman konkreettisemman tuntuman erilaisiin avoimen datan lähteisiin: miten niistä haetaan tietoa ja missä formaatissa dataa on tarjolla.

Tampereen alueella asuvana haluaisin katsella Tampereen eri ulosmenoväylien säätilannetta ja liikennetietoja siten, että valitsen sovelluksessa ulosmenoväylän ja minulle näytetään eri lähteistä kerättyä dataa kyseiseltä ulosmenoväylältä. Suunnittelemme yksinkertaisen sovelluksen, josta voidaan valita jokin Tampereen ulosmenoväylistä ja sen jälkeen sovellus näyttää kyseisen ulosmenoväylän tietoja eri lähteistä yhdistellen.

Sovellus voisi käyttää ainakin seuraavia avoimen datan palveluita:
– liikenneviraston kelikamerakuva
– liikenneviraston LAM aseman tiedot (liikennemäärä molempiin suuntiin ja mitattu keskinopeus molempiin suuntiin)
– ilmatieteenlaitoksen reaaliaikaiset säätiedot lähimmältä havaintoasemalta
– ilmatieteenlaitoksen säätiedot viimeisimmän 2 tunnin ajalta, jotta voidaan sanoa onko lämpötila laskussa vai nousussa

Koska tiedot kerätään eri lähteistä ja niiden välillä ei ole suoraa riippuvuutta, tehdään tietojen yhdistäminen ns. mappaustaulukolla. Tämä tapa on mahdollinen, koska sovellus perustuu siihen että käyttäjä ensin valitsee jonkin havainnointipisteen tuettujen pisteiden listalta.

Tietolähteet käyttävät hakuoperaatioisssaan hyvin erilaisia tunnisteita. Kelikameroilla on omat tunnisteensa, LAM -asemilla on LAM-tunnistenumerot ja Ilmatieteenlaitoksen sääasemilla on omat tunnisteensa. On siis muodostettava taulukko, johon kerätään kutakin  havainnointipistettä vastaavien osajärjestelmien käyttämät tunnisteet.

Seuraavassa taulukossa on esitetty viiden Tampereen ympäristön havainnointipisteen tunnistenumeroita:

avoin_data_sov1_taul

Lähteet
Kelikamerat:
http://tie.digitraffic.fi/sujuvuus/ws/cameraPresets

LAM tunnisteet:
https://github.com/finnishtransportagency/metadata/blob/master/csv/meta_traffic_stations.csv
https://github.com/finnishtransportagency/digitraffic/wiki/Ajantasaiset%20LAM%20mittaustiedot

Sääasemat:
http://ilmatieteenlaitos.fi/havaintoasemat, http://ilmatieteenlaitos.fi/avoin-data-saahavainnot

Sovellukseen on helppo lisätä uusia tietolähteitä myöhemmin, lisäämällä tietolähteen tiedot taulukkoon ja toteuttamalla tietolähdettä vastaavan tiedonhakulogiikan.

Sovelluksessa hyödynnettävät rajapinnat tarkemmin

Kelikamerakuva
Haetaan kelikamerakuva osoitteesta http://weathercam.digitraffic.fi/[kelikameran tunniste].jpg, esimerkiksi http://weathercam.digitraffic.fi/C0451002.jpg

LAM tiedot
Kysely suoritetaan osoitteeseen http://tie.digitraffic.fi/sujuvuus/ws/lamData
Vastauksena saadaaan xml muotoinen vastaus, jonka skeema löytyy osoitteesta
http://tie.digitraffic.fi/sujuvuus/ws/lamData?wsdl
XML vastaus pitää siis parsia ja poimia siitä halutut tiedot eli liikennevolyymit sekä keskinopeustiedot halutulle LAM asemalle.

Sääasemien tietokyselyt
Sääasemien tietokyselyt pohjautuvat sääaseman tunnisteeseen eli ns. FMISID -tunnisteeseen. Kyselyn suorittamiseen vaaditaan API Key eli avain, jota käyttämällä hakuja voi tehdä. Ilman avainta ei voi suorittaa kyselyjä. Kyselyn esimerkki JavaScriptiä käyttäen löytyy täältä: http://en.ilmatieteenlaitos.fi/open-data-manual

Sovelluksen käyttöliittymän hahmottelu

Sovelluksen pääikkuna on yksinkertaistettu graafinen näkymä, josta voi valita klikkaamalla jonkin Tampereen ulosmenoväylän:

avoin_data_sov1_startKun käyttäjä klikkaa jotain ulosmenoväylän nimeä, suoritetaan vastaavat tietopyynnöt, parsitaan vastauksista oleelliset tiedot, sekä näytetään käyttäjälle tiedot:

avoin_data_sov1_selectedYhteenveto

Tässä postauksessa tutustuttiin avoimen datan lähteiden luonteeseen, tekniikkaan ja saatavilla olevien palveluiden löytämiseen. Hahmottelimme myös yksinkertaisen sovelluksen, jonka suunnittelussa saatiin hieman tarkempaa tietoa muutamasta rajapinnasta sekä niiden tuottamien tietojen yhdistämisestä.

Avoimen datan palveluista syntyi käsitys, että yleensä palvelut ovat hyvin itsenäisiä ja tietojen yhdistäminen ei välttämättä ole suoraviivaista, jos tiedot eivät tule samalta tuottajalta.

Karttapohjaisiin palveluihin tutustuessa syntyi käsitys, että karttapohjiin perustuvia erilaisia tietopalveluja on melko hyvin tarjolla. Erityisesti kaupungit ja kunnat ovat kunnostautuneet avoimen datan tarjoamisessa. Näiden tarjoamat tietopalvelut ovat kuitenkin tyypillisesti päteviä vain paikalliseen käyttöön ja näin ollen niiden potentiaalinen käyttäjäjoukko rajautuu maantieteellisellä rajauksella kyseisen kaupungin/kunnan alueelle.

Joka tapauksessa avoimen datan palvelut tarjoavat ohjelmistokehittäjille valmiin pohjadatan, jonka päälle voi toteuttaa erilaisia palveluita.