Vektoritiilet GeoServerissä

Lyhyt johdanto vektoritiiliin

Internetin eri karttapalveluissa hyödynnetään yleisesti karttatiilipalveluita kuten WMTS. Nämä palvelut toimittavat pieniä, tyypillisesti 256×256 pikseliä kooltaan olevia karttakuvia, eli karttatiiliä. WMS-karttakuvapalveluihin verrattuna WMTS-palveluiden merkittävin etu on suorituskyky. Karttatiilet muodostavat karttatiiliruudukon, ja ruudukon tiilet voidaan tallentaa valmiiksi palvelimen välimuistiin. Pienien, valmiiden karttatiilien lähettäminen on nopeampaa kuin yhden ison karttakuvan generoiminen. Karttaa siirtäessä käyttäjä näkee kartan latautuvan paloittain sitä mukaa kun tiiliä ladataan palvelimelta.

Karttatiilet ovat yleensä olleet kuva- eli rasterimuodossa, sillä valmiiden karttakuvien piirtäminen selaimessa on teknisesti yksinkertaisin toimiva ratkaisu. Viime vuosina nk. vektoritiilet ovat kuitenkin alkaneet herättää entistä enemmän kiinnostusta. Yksittäinen vektoritiili sisältää karttaruudun piirtämiseen tarvittavan datan vektorimuodossa: geometrian lisäksi mukana saattaa siis olla myös kohteiden ominaisuustietoja. Kuviin verrattuna vektorimuotoisen datan käyttämisessä on omat hyötynsä ja haasteensa. Toisin kuin rasteritiilien kanssa, vektoritiilten kuvaustekniikka määritetään täysin käyttäjän päässä. Tämä tarkoittaa, että samoja vektoritiiliä voidaan hyödyntää useammassa sovelluksessa tai kartassa, ja kartan ulkoasua voidaan muuttaa dynaamisesti. Vektoritiili saattaa myös olla tiedostokooltaan kuvatiiltä pienempi, joskin tämä etu riippuu vektoridatan tiheydestä. Järkevästi käytettynä vektoritiiliä hyödyntämällä on mahdollista saavuttaa rasteritiiliä parempi suorituskyky ja avata uusia mahdollisuuksia vaikuttaa karttojen ulkoasuun.

Vektoritiilten jakelu GeoServerillä

Vektoritiilten tarjoaminen GeoServerillä perustuu GeoServeriin integroidun GeoWebCachen hyödyntämiseen. GeoServer ei valmiiksi sisällä tukea vektoritiilille, vaan sen lisäämiseksi tulee asentaa erillinen Vector Tiles-laajennos. Laajennoksen asentaminen on helppoa: lataa ensin GS-versiotasi vastaava laajennospaketti GeoServerin lataussivuilta. Pura paketin sisältö GeoServer-kansiosi alta löytyvään WEB-INF/lib hakemistoon, ja käynnistä GeoServer uudestaan.

Vector Tiles-laajennoksen asentamisen jälkeen vektoritasoja voidaan julkaista GeoServerillä vektoritiilinä valitsemalla haluttu formaatti tason Tile Caching-valikosta. Oletuksena löytyvien gif, jpeg ja png-tiedostomuotojen lisäksi laajennoksen asentamisen myötä Tile Caching-valikkoon tulee vaihtoehdoiksi myös GeoJSON, TopoJSON ja MVT. Kaikki uudet vektoritasot voidaan myös julkaista automaattisesti vektoritiilinä valitsemalla haluttu vektoritiiliformaatti Caching Defaults-valikosta.

Avoimia paikkatietostandardeja kehittävä ja ylläpitävä Open Geospatial Consortium järjesti vuonna 2018 Vector Tiles Pilot-pilottiprojektin, jonka toinen vaihe on parhaillaan käynnissä syksyllä 2019. Vektoritiilet ovat yhä verrattain uusi teknologia, eikä selkeää standardia ole vielä vakiintunut. Tähän mennessä yksi suosituimmista formaateista vektoritiilien jakeluun on ollut Mapbox Vector Tiles-spesifikaatio eli MVT. MVT-tiilet varastoidaan ja välitetään usein binäärimuotoisessa Protocol Buffer eli PBF-muodossa. PBF-koodattu data on esimerkiksi tekstipohjaista XML-dataa tiheämpää, minkä ansiosta se soveltuu hyvin vektoritiilien välitykseen. Protocol buffer on yleisesti käytössä oleva formaatti, eikä sitä ole erikseen optimoitu paikkatiedoille. Paikkatietojen binäärimuotoon muuntamista varten on myös omia vaihtoehtoja kuten FlatGeoBuf, mutta toistaiseksi näitä ei voida vielä hyödyntää GeoServerissä vektoritiilten kanssa.

Vektoritiilitasoja voi esikatsella muiden tiilitettyjen tasojen tapaan Tile Layers-valikosta. MVT-formaatissa julkaistut tasot näkyvät esikatseluvalikossa pbf-nimellä. Kuten kuvatiilienkin kanssa, GeoServer generoi vektoritiiliä esikatselukarttaa liikuttaessa ja tallentaa ne automaattisesti välimuistiin.

Tiilien valmiiksi välimuistiin generoiminen eli seedaus toimii samaan tapaan kuin muiden tiiliformaattien kanssa valitsemalla Tile Layers-valikosta halutun tason kohdalta Seed/Truncate. Aukeavassa ikkunassa valitaan MVT-tiiliä generoitaessa vaihtoehto application/vnd.mapbox-vector-tile, joka on MVT:n ns. MIME-tyyppi. Kuvamuotoisiin karttatiiliin verrattuna välimuistiin tallennetut vektoritiilet vievät usein huomattavasti vähemmän levytilaa.

MapBox-tyylien käyttö

GeoServerillä julkaistujen MapBox-vektoritiilitasojen kuvaustekniikan määrittämiseen voidaan käyttää MapBox-tyylejä. GeoServerin käyttämiin SLD-tyyleihin verrattuna MapBoxin omat tyylit ovat määritetty selainystävällisessä JSON-muodossa. MapBox-tyylejä voidaan kirjoittaa itse suoraan asiakassovelluksessa tai luoda graafisesti esimerkiksi MapBox Studiolla tai selainpohjaisella Maputnik-työkalulla. MapBox-tyylikieltä voidaan käyttää tyylien määrittämiseen myös suoraan GeoServerissä MBStyle Styling-laajennoksen avulla.

MapBox-tyylien käyttö GeoServerillä julkaistujen MapBox-vektoritiilten kanssa edellyttää, että palvelin tukee CORS-mekanismia. CORS:in käyttöönotto riippuu palvelinympäristöstä. GeoServer-asennuksen mukana tulee tyypillisesti Jetty-sovelluspalvelin, jossa CORS:in voi kytkeä päälle muokkaamalla web.xml-konfiguraatiotiedostoa hakemistossa webapps\geoserver\WEB-INF ja käynnistämällä GeoServer uudestaan. Avaa tiedosto tekstieditorilla ja poista kommenttimerkinnät kohdasta:

<web-app>
  <filter>
      <filter-name>cross-origin</filter-name>
      <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>cross-origin</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
 </web-app>

Palvelimen CORS:in päällekytkemisen jälkeen MapBox-tyylejä voidaan käyttää kaikkien MapBox-vektoritiiliformaatissa julkaistujen tasojen kanssa. Muita palvelinpuolen muutoksia ei tarvita, sillä asiakassovellus vastaa vektoritiilien piirtämisestä. MapBox-tyylien käyttämiseksi tarvitaan siis tuki asiakassovelluksen päässä: esimerkiksi OpenLayers-kirjastoon tuen voi lisätä ol-mapbox-style -komponentilla. GeoServerillä julkaistu taso voidaan määrittää tyylin lähdemäärityksessä seuraavasti:

"<source-name>": {
  "type": "vector",
  "tiles": [
    "http://localhost:8080/geoserver/gwc/service/wmts?REQUEST=GetTile&SERVICE=WMTS
        &VERSION=1.0.0&LAYER=<workspace>:<layer>&STYLE=&TILEMATRIX=EPSG:900913:{z}
        &TILEMATRIXSET=EPSG:900913&FORMAT=application/vnd.mapbox-vector-tile
        &TILECOL={x}&TILEROW={y}"
  ],
  "minZoom": 0,
  "maxZoom": 14
}

Hyödyntäminen nyt ja tulevaisuudessa

Vaikka vektoritiilet sisältävätkin vektorimuotoista dataa, ovat ne ensisijaisesti suunnattu karttojen piirtämiseen. Käyttäjien kannattaakin muistaa, ettei vektoritiiliä suositella käytettäväksi paikkatietoanalyysien tekemiseen. Analyyseissä käytettävien vektorimuotoisten aineistojen lataamiseen kannattaa siis jatkossakin hyödyntää esimerkiksi WFS-palveluita. Huomioimisen arvoista on myös, että vektoritiiliä käytettäessä vastuu aineiston piirtämisestä siirtyy palvelimelta loppukäyttäjälle. Tämä asettaa rasteritiiliin verrattuna enemmän kuormitusta käyttäjän järjestelmälle, mikä kannattaa ottaa huomioon erityisesti mobiililaitteille suunnitelluissa sovelluksissa.

Vektoritiilet ovat olleet viime vuosina kovassa nosteessa, ja niihin liittyvä tekniikka kehittyy edelleen nopeaa vauhtia. Maanmittauslaitos julkaisi jo vuonna 2018 beta-rajapinnan teknologian kokeilemista varten, ja HSL tarjoaa jo esimerkiksi liityntäpysäköintialueiden ja kaupunkipyöräpysäkkien sijaintitietoja avoimen rajapinnan kautta vektoritiilimuodossa. Vektoritiilten tarjonta sekä hyödyntäminen tuleekin varmasti hiljalleen yleistymään myös muissa karttapalveluissa sitä mukaa, kun tietoisuus niiden tarjoamista hyödyistä ja mahdollisuuksista kasvaa.

Kiinnostuitko vektoritiilien hyödyntämisestä tai heräsikö sinulla kysymyksiä? Lähetä viesti osoitteeseen info@gispo.fi!

Mikael Vaaltola

Mikael Vaaltola on tuleva geoinformatiikan DI, jota kiinnostaa erityisesti ohjelmistokehitys, paikkatietoanalyysit ja koodaus.