Animaatioita kartalla – kaupunkien rakentumisen visualisointia

Blogisarjasta

Tiedosta kartta – Sivari avoimen datan pyörteissä on blogisarja, josssa HRI:n siviilipalvelusmies Juho Antikainen kirjoittaa kaikesta avoimeen dataan enemmän tai vähemmän liittyvästä syksyn 2022 ja kevään 2023 aikana.

Sivarivuoteni aikana minua on alkanut kiinnostaa animaatioiden mahdollisuudet temporaalisen, eli ajasta riippuvan, datan kuvaamiseen kartalla. Tässä blogissa haluan erityisesti kokeilla kartta-animaatioiden tekemistä ja pohdin myös lyhyesti, minkälaisia käyttötarkoituksia niillä on. Tässä blogissa teen kaksi erilaista kartta-animaatioita Espoon ja Vantaan rakennusdatasta, missä hyödynnän aineistossa olevia asuinrakennusten valmistusvuosia visualisoimaan kaupungin rakentumista. Datan käsittelyyn ja visualisointiin käytän avoimen lähdekoodin QGIS-paikkatieto-ohjelmaa. Animaation laatimiseen käytän GIMP-kuvankäsittelyohjelmaa

Näytän aluksi tekemäni visualisoinnit sekä Espoon että Vantaan osalta ja pohdin niiden toimivuutta. Tämän jälkeen esittelen vinkkejä ja ohjeita, jotka auttavat tämän kaltaisten kartta-animaatioiden tekemisessä.

Kartta-animaatioiden tekemisessä suureksi avuksi osoittautui Ujaval Gandhin kirjoittama blogi, (englanniksi) josta löytyy hyvät ja selkeät ohjeet QGIS:sin Temporal Controller -työkalun käyttöön. QGIS:sin peruskäytön avuksi suosittelen tutustumaan Helsingin kaupungin avoimen paikkatiedon oppaaseen ja lisäksi QGIS-yhteisön ylläpitämään kattavaan dokumentaatioon.

Aineistoina visualisoinneissa käytin Espoon ja Vantaan rakennusdataa. Lisäksi taustakarttoja varten käytin Espoon sekä Vantaan kaupunginosajakoja. Espoon aluejaosta leikkasin pois merialueet HSY:n maanpeiteaineiston avulla. Kaikki blogissa käytetyt aineistot ovat saatavilla kaupunkien ja HSY:n avoimista paikkatietorajapinnoista.

Espoon rakennuksia lämpökarttoina

Olen aikaisemmin tässä blogisarjassa leikkinyt lämpökartoilla, kun visualisoin liikenneonnettomuusrekisterin dataa. Alun perin suunnittelin kirjoittavani blogilleni jatkoa, jossa tekisin kartta-animaatioita liikenneonnettomuuksista. Muut projektit veivät kuitenkin mennessään, mutta ajatus lämpökarttojen animoinneista ei lähtenyt mielestäni. Eräänä ei niin keväisenä päivänä selailin HRI:n datakatalogia ja sieltä tuli vastaan Espoon rakennukset -data. Tässä polygonimuotoisessa paikkatietoaineistossa on ominaisuustietona muun muassa rakennustyyppi, pinta-ala ja, mikä minua kiinnosti, rakennuksen valmistumispäivämäärä.

Tavoitteenani oli luoda kartta Espoon, jossa näkyisi ne alueet, mihin uudet asuinrakennukset keskittyvät viiden vuoden aikaikkunoissa.  Muutamien erilaisten kokeilujen jälkeen päädyin alla näkyvään versioon. Taustalla on Espoon kaupungin pienaluejako, josta on poistettu merialueet. Lisäksi lisäsin taustakarttaan muutaman Espoon keskeisen asutuskeskuksen nimen kartan tulkinnan helpottamiseksi.

GIF-animaatio Espoon rakennusten valmistumisvuosista. Animaatiossa viiden vuoden aikaväleillä per ruutu ja käsittää vuodet 1952-2022. Rakennukset kuvattu lämpökarttoina, jossa suuremmat rakennusten tihentymät näkyvät punaisella.
Espoon kaupunkikehitysanimaatio. Napauta animaatiota suurentaaksesi sitä.

Visualisointi näyttää mukavasti alueet, joihin kaupungin laajeneminen on keskittynyt vuosikymmenien saatossa. Ongelmaksi muodostuu se, että animaatio on käytännössä nopeutettu diaesitys, jossa tarkkaavaisimmallakin katsojalla on vaikeuksia pysyä mukana. Animaation nopeutta pystyy tietenkin hidastamaan. Eikö olisi selkeyden kannalta parempi vain esittää animaation ruudut erillisinä karttoina?

Erillisenä ruudut olisivat varmasti paras vaihtoehto tieteellisessä artikkelissa tai muussa virallisessa julkaisussa. Jos taas tavoitteena on saada laajemman yleisön kiinnostus aiheeseen, esimerkiksi sosiaalisen median välityksellä, niin tämän tyyppiset kartta-animaatiot voivat olla hyödyllisiä. Ne ovat tavallisuudesta poikkeavia ja saattavat siten kiinnittää katsojan huomion paremmin esimerkiksi sosiaalisen median informaatiotulvassa kuin perinteisemmät kartat. Vaikka ensimmäisellä katsomiskerralla katsoja ei ehdi välttämättä sisäistämään kaikkia yksityiskohtia, suuret trendit näkyvät selvästi.

Vantaan rakennuksia polygoneina

En ollut tyytyväinen Espoon animaatiossa sen kaoottisuuteen. Punaisia pilkkuja vilisi harmaan taustan päällä paljon, mutta kokonaisuuden hahmottaminen oli vaikeaa. Etsin ratkaisua näihin ongelmiini HRI:n sovellusgalleriasta, jossa minulle tuli vastaan Topi Tjukanovin tekemä kartta-animaatio. Tässä animaatiossa rakennukset ilmestyvät kumulatiivisesti kartalle vuosien vaihtuessa, ja lämpökarttojen sijasta rakennukset esitetään alkuperäisessä muodossaan polygoneina.

Päätin laatia saman tyylisen visualisoinnin Vantaan rakennusdatasta ja luomukseni näkyy alla. Rakennusten väriksi valikoitui keltainen, sillä se erottuu helposti tummaa taustaa vasten ja animaatioon ilmestyvät rakennukset näyttävät siltä, että valot syttyisivät pikkuhiljaa eri puolille kaupunkia. Animaatiota voisikin verrata siihen, kun illan pimetessä valot syttyvät vähitellen pimeää maata vasten avaruudesta katsottuna.

GIF-animaatio Vantaan rakennuksista polygonimuodossa. Animaatio käsittää vuodet 1952-2022 ja ruutuja on yksi per vuosi.
Vantaan kaupunginrakentumisanimaatio. Napauta animaatiota suurentaaksesi sitä.

Verrattuna Espoon animaatioon Vantaan animaatio on eheämpi kokonaisuus, sillä animaation ruudut eivät korvaa toisiaan, vaan ruudut kumulatiivisesti lisäävät rakennuksia kuvaan. Katsoja näkee muutamassa sekunnissa Vantaan asutuksen leviämistä muutaman viime vuosikymmenen aikana ja viimeisessä ruudussa näkyy nykytila.

Niin kuin Espoon tapauksessa, näen tämän kaltaisen animaation mahdollisuudet etenkin sosiaaliseen mediaan kohdistuvassa viestinnässä animaation näyttävyyden ansiosta. Lisäksi Vantaan kumulatiivisessa animaatiossa on punainen lanka, tarina, jolla houkutellaan katsojan huomio.

Kun näitä kahta animaatioita vertailee keskenään, on hyvä muistaa, että ne oikeastaan kuvaavat hieman erilaisia asioita. Espoon animaatio näyttää, mitkä ovat olleet asuinrakentamisen keskeiset alueet eri vuosikymmeninä. Vantaan animaatiossa taas kuvataan kokonaisvaltaisemmin asuinrakennusten leviämistä.

Ohjeet

Seuraavaksi esittelen muutamia hyödyllisiä vinkkejä QGIS- ja GIMP ohjelmille, jotka auttavat kartta-animaatioiden tekemisessä. Temporal Controller -työkalun yleisen käytön avuksi suosittelen tutustumaan Gandhin mainioon blogiin.

Datan suodatus WFS-rajapinnan avulla

Koska etenkin Vantaan rakennusdata on kooltaan suuri, yli 150 000 rakennusta ja QGIS toimii erittäin hitaasti suurien datojen käsittelyssä, suosittelen suodattamaan dataa jo ennen kuin sitä lisää QGIS:siin. Tämä onnistuu lisäämällä aineiston Tasot -> Lisää Taso -> Lisää WFS-taso kautta. Valikkopolusta avautuu ikkuna, johon pystyy tietokantojen käsittelyyn tarkoitetulla SQL-kielellä suodattamaan WFS-rajapintaan tehtävällä kyselyllä dataa. Vantaan rakennusdatan tapauksessa hyvä suodatustapa tähän käyttötarkoitukseen on suodattaa aineisto rakennuksen tyypin perusteella ja tuoda QGIS:siin ainoastaan tyypin ”rakennus” datat (kuva alla). Tämä jättää pois muun muassa erilaiset vajat, katokset sekä portaikot, jotka eivät ole kiinnostavia tämän visualisoinnin kannalta.

Kuvakaappaus QGIS-ohjelman SQL-suodatusikkunasta, jossa on näytetty SQL-kysely Vantaan rakennusaineiston suodattamiseen.
SQL-kysely, jolla voi suodattaa rakennustyypit Vantaan rakennusaineistosta.

Datan valmistelu ja käsittely

Ennen itse visualisointien laatimista dataa pitää hieman siivota ja muokata. Rajasin visualisoinnit ainoastaan asuinrakennuksiin ja poistin aineistosta kaikki rakennukset, joiden käyttötapaa tai valmistumisvuotta ei tunneta. Käyttötarkoitus-kentän avulla valitsin kaikki asuinkerrostalot, paritalot, omakotitalot sekä rivitalot ja vein ne omaksi tasokseen. Halutessaan muut kuin asuinrakennukset voi suodattaa pois myös ennen tason lisäämistä projektiin edellisen kohdan menetelmällä.

Tässä vaiheessa on vielä hyvä tarkistaa, että rakennusten valmistumispäivämäärät ovat sopivassa muodossa. Jos päivämäärät ovat datassa merkkijonoina, mutta silti standardoidussa muodossa, datatyypin muuttaminen onnistuu helposti ”Muokkaa skeemaa” -työkalulla. Jos päivämäärät eivät ole yhteneväisessä muodossa, ne täytyy muuttaa sellaiseksi esimerkiksi erillisen python-skriptin avulla. QGIS:sin ja pythonin yhteiskäyttöön liittyvät ohjeet jäävät tämän blogin sekä minun taitotasoni ulkopuolelle. Jos aihe kuitenkin kiinnostaa, niin QGIS:sin kehittäjien dokumentaation (englanniksi) avulla pääsee hyvin alkuun.

QGIS ja kieli

Blogin kuvissa saatat huomata, että QGIS:sin jotkin valikot ovat aikamoista englannin ja suomen sekamelskaa.  Syy on siinä, että QGIS:sin eri kieliversiot, kuten kaikki muukin kehittäminen, ovat vapaaehtoisten tekemiä he ovat ymmärrettävästi keskittyneet ohjelman eniten käytettyihin toiminallisuuksiin. Tässä blogissa esiintyvä Temporal Controller ei ole tällainen, jolloin monet sen toiminallisuudet ovat englanniksi, vaikka QGIS:ini kieli on suomi

Vuosilaskurin lisääminen

Vuosilaskurin pystyy lisäämään menemällä Näytä -> Karttaelementit -> Otsikko Nimiö, josta aukeaa tekstin lisäämisen karttanäkymään mahdollistava ikkuna. Tekstin sijasta lisätään kenttään funktion, joka näyttää esillä olevan karttanäkymän päivämäärän. Sen jälkeen päivämäärästä poistetaan kuukaudet ja päivät muuttamalla päivämäärään vuodeksi (koodissa ’yyyy’). Kun Temporal Controller -työkalun avulla kokeilee nyt muuttaa aikaa, oikealla alhaalla oleva vuosiluku päivittyy animaation jokaisella ruudulla.

Kuvakaappaus QGIS-ohjelman ikkunasta, jossa voi luoda vuosilaskurin. Kuvassa näkyy Espoon animaation vuosilaskurin mahdollistama koodi.
Espoon animaation vuosilaskurin koodi. Vantaan vastaavasta on jätetty jälkimmäinen hakasulkulauseke pois.

Asutuskeskusten nimien lisääminen taustakarttaan

Asutuskeskusten nimien lisääminen taustakarttaan onnistuu taustatason ominaisuusvalikon kautta (Aluejako-taso -> Ominaisuudet -> Nimiöt). Jos nimiöt vain aktivoi ja asettaa näytettäviksi nimiksi alueiden suomenkieliset nimet, niin QGIS oletusarvoisesti piirtää kaikkien alueiden nimet jokaisen alueen päälle. Tällöin taustakartasta tulee liian kaoottinen ja nimet vievät liikaa huomiota itse visualisoinnilta.

Ratkaisuna näihin ongelmiin on piirtää nimiöt ainoastaan keskeisimpien asutuskeskusten päälle. Samalla osa-alueiden nimet voidaan vaihtaa vastaamaan paremmin yleistä käsitystä paikannimistä. Esimerkiksi päätin vaihtaa Tapiolan keskuksen Tapiolaksi ja Pohjois-Leppävaaran vain Leppävaaraksi. Tämä onnistuu muutamalla koodirivillä QGIS:n funktioeditorissa, jonka saa avattua nimiöikkunassa ε (epsilon) -painikkeesta.

Alla olevassa kuvassa näkyy koodi, jota käytin Espoon asutuskeskusten nimien esittämiseen. Skripti toimii siten, että se etsii when-osassa tietyn nimisen kaupunginosan, jonka jälkeen then-osassa tämän kaupunginosan nimi korvataan toisella nimellä.

Kuvakaappaus QGIS-ohjelman ikkunassa, jossa pystyy määrittämään nimiöiden näkymistä karttapohjassa. Ikkunassa on koodia, jolla Espoon animaation taustakartan nimet on lisätty.
Koodi nimiöikkunassa, jolla lisätään nimiöt halutuille alueille.

Animaation laatiminen Gimpillä

Kun kartta näyttää hyvältä, animaation voi viedä pois QGIS:stä Temporal Controllerin ”Export animation” painikkeen kautta. Painikkeesta avautuvasta ikkunasta kannattaa varmistaa, että ”Draw Active decorations” -painike on valittuna. Tällöin vuosilaskuri piirtyy vietäviin kuviin mukaan. Tämän jälkeen valitse kansio, johon kuvat menevät, ja paina ”Tallenna” painiketta. QGIS alkaa tämän jälkeen viemään kuvia valitsemaasi kansioon. Jos kuvia on paljon, kuten minulla oli Vantaan animaatiossa, vieminen voi kestää muutamia minuutteja.

Kun kuvat ovat kansiossa, voidaan siirtyä GIMP:in puolelle. Muitakin kuvankäsittelyohjelmia voi käyttää, mutta valitsin GIMP:in sen ilmaisuuden ja avoimen lähdekoodin vuoksi. Tiedosto -> Avaa tasoina avautuvasta ikkunasta valitse kaikki (Ctrl + A pikakomento on oiva apua tässä) animaatioon tulevat kuvat ja paina Avaa. Jos kuvia on paljon, avaamisessa voi kulua muutamia minuutteja.

Seuraavaksi animaatio kannattaa optimoida Suodattimet -> Animaatiot -> Optimoi (GIF-tiedostolle) työkalun avulla, mikä pienentää huomattavasti animaation tiedostokokoa. Tämä työkalu tunnistaa kuvista muuttumattomat alueet ja muuttaa ne läpinäkyviksi. Lisää tietoa työkalun toiminnasta ja selventäviä kuvia löytyy GIMPin dokumentaatiosta (englanniksi).

Kuvakaappaus GIMP-ohjelmasta, jossa näkyy yksi ruutu Espoon animaatiosta.
Espoon kartta-animaatio GIMP-kuvankäsittelyohjelmassa.

Tässä vaiheessa on hyvä tarkistaa animaation esikatselun kautta, että (Suodattimet -> Animaatio -> Toisto).  Jos animaatio etenee liian nopeasti, siitä ei tarvitse tässä vaiheessa vielä huolestua. Nopeuttaa pystyy säätämään animaation vientiasetuksissa.

Kun animaatio näyttää hyvältä, on aika tallentaa se GIF-tiedostoksi. Tämä tapahtuu suunnistamalla Tiedosto -> Vie kuva nimellä. Vaihda avautuvassa ikkunassa tiedostotyyppi .gif-päätteiksi ja tallenna. Sen jälkeen avautuu ikkuna, josta pystyy muokkaamaan GIF-animaation asetuksia (kuva alla). On erityisen tärkeää, että asetukset ovat alla olevan kuvan mukaisia. Animaation nopeutta pystyy muokkaamaan ”Tauko ruutujen välissä” -kohdasta, jossa määritellään, kuinka pitkään animaatio pysyy kussakin ruudussa. Hyvä tapa etsiä sopivaa taukoaikaa on testailla eri nopeuksia animaation esikatselussa ja katsoa mikä aika sopii parhaiten.

Kuvakaappaus GIMP-ohjelman GIF-muotoisten tiedostojen vientiasetuksista.
Animaation vientiasetukset GIMP-ohjelmassa. Tästä ikkunasta voi muun muassa määritellä, kuinka pitkä animaation ruutujen vaihtumisväli on.

Yhteenvetoa

Tutkin tässä blogissa kartta-animaatioiden mahdollisuuksia ajasta riippuvan paikkatiedon visualisoinnissa. Laadin Espoon ja Vantaan rakennusdatoista kaksi erilaista visualisaatiota, jotka kuvaavat hieman eri tavoin kyseisten kaupunkien kehittymistä vuosikymmenten saatossa. Huomasin, että tällaisten animaatioiden vahvuudet ovat näyttävyydessä eikä niinkään tiedon tehokkaassa levittämisessä. Tällöin ne sopivat hyvin esimerkiksi sosiaaliseen mediaan. Lopuksi esittelin vielä muutamia QGIS-sekä GIMP-vinkkejä, jotka auttavat vastaavien animaatioiden tekemisessä.

Hyvää ja aurinkoista kesänodotusta!

Esitys blogista

Puhuin tästä blogista myös HRI Loves developers Tiedosta kartta -tapahtumassa 8.6.2023: