Julkaistu 14.10.2019

Uusi PostGIS 3 tulossa: mukana lisää kaikkea

PostGIS on ollut 7 vuotta versioissa 2.x, mutta tänä vuonna spatiaalisen datan tallentamisen ja analysoinnin työhevonen on saamassa versiopäivityksen kun se siirtyy kolmanteen sukupolveen. Avoimen lähdekoodin PostgreSQL tietokantaohjelmiston viimeisin versio on 12 ja PostGIS on tällä hetkellä versiossa 2.5.3, mutta release candidate PostGIS 3.0 on myös jo saatavilla.

PostGIS on PostgreSQL:n spatiaalinen laajennos, eli siinä missä PostgreSQL on relaatiotietokanta, joka pystyy käsittelemään normaaleja tietotyyppejä (numerot, tekstit, binääridata jne), tuo PostGIS sille toiminnallisuudet käsitellä paikkatietokohteita. Tämä on sinulle ehkä tämän blogin lukijana jo tuttua, mutta mitä uusi PostGIS versio tuo tullessaan?

Lisää tehoa

Uusi PostGIS tuo mukanaan ennen kaikkea lisää tehoa. 

PostgreSQL on jo useamman vuoden hyödyntänyt rinnakkaisia kyselyjä (parallel query), joissa SQL kyselyn työ jaetaan prosessoreiden kesken ja suoritetaan samanaikaisesti. Tämä useita ytimiä hyödyntävä tehokeino on ollut tähän asti käytössä vain muutamissa PostGISin kyselyissä. Versiossa 3.0 PostGIS alkaa kuitenkin laajemmin hyödyntämään rinnakkaisia kyselyitä, mikä parantaa paljon prosessointitehoa vaativien spatiaalisten kyselyiden suorituskykyä huomattavasti.

PostGISin taustalla toimivat monet eri kirjastot, kuten kolmiulotteisista operaatioista vastaava CGAL, perusgeometrian hallinnasta vastaava GEOS ja koordinaattimuunnoksista vastaava Proj.

PostGIS 3

Siirtyminen uuteen Proj kirjaston versioon 6 tarkoittaa käytännössä esimerkiksi paljon tarkempaa koordinaattijärjestelmien hallintaa. Aiemmin myös koordinaattimuunnokset ovat käyttäneet usein WGS84:ää välivaiheena ST_Transform() funktiossa, mikä on voinut aiheuttaa virheitä kun muunnos on tehty kahteen otteeseen (alkuperäisestä WGS84:ään ja siitä haluttuun). Nyt tätä taustalla tapahtunutta välivaihetta ei enää Proj 6 versiossa ole.

Uuden version myötä siirtyminen uuteen GEOS 3.8 kirjastoon tuo hyötyjä tehokkuuden kautta, kun kirjaston C++ koodia on siivottu ja kehitetty.

Lisää ominaisuuksia

Vektoritiilet ovat tehneet tuloaan karttapalveluihin jo useamman vuoden ja nyt ne ovat vähitellen vakiinnuttamassa asemaansa karttakuvatiilien rinnalla. PostGISissä on ollut jo jonkin aikaa funktio ST_AsMVT, joka on palauttanut MapBoxin vektoritiilispesifikaation mukaisia vektoritiilielementtejä suoraan tietokannan taulusta tai näkymästä. Tähän on tulossa kuitenkin useita suorituskyvyn parannuksia.

Muita vektoritiilien parannuksia on mm. Uusi ST_TileEnvelope() -funktio, joka ottaa parametreina tiilien zoom-tason sekä x- ja y -arvot ja muodostaa näiden avulla halutun alueen rajauksen vektoritiilien generointia varten Web Mercator projektiossa.

Samalla kun rasteritiilet ovat muuttumassa vektoriksi, ollaan paikkatiedon kentällä hivuttautumassa XML:stä kohti JSONia. Tämä näkyy esim. OGC API:n kehityksessä, mutta myös PostGISin puolella. PostGIS on sisältänyt jo pitkään ST_AsGeoJSON funktion, mutta se on ottanut parametrikseen vain PostGISin geometrian ja palauttanut vain GeoJSON geometrian. Uudessa PostGISissä on mahdollista antaa suoraan funktiolle myös muita sarakkeita, jolloin se palauttaa täydellisen GeoJSON kohteen ominaisuustietoineen!

Yksi pieni, mutta mielenkiintoinen muutos on myös rasteriaineistojen tuen siirtäminen pois PostGISin ytimestä. Käytännössä tämä tarkoittaa ainoastaan sitä, että postgis_raster pitää ottaa käyttöön erikseen. Rastereiden käsittely tietokannassa ei yleisesti tuo läheskään vektoriaineistojen kaltaisia hyötyjä tai sisällä läheskään yhtä laajoja toiminnallisuuksia, mutta tietyissä tapauksissa se voi hyvinkin olla järkevää. Rasterituen siirtäminen ei siis varsinaisesti poista mitään toiminnallisuuksia, vaan PostGISin ydintoiminnallisuudet koitetaan pitää tällä tavoin hillityn kokoisina.

Kolmiulotteisen datan hallinta tulee tällä hetkellä paikkatiedon kentällä monesta suunnasta esille ja sillä saralla tapahtuu kehitystä myös PostGISin puolella. Monet kolmiulotteisia datoja käsittelevät funktiot ovat saaneet korjauksia ja myös jotain kokonaan uusia toiminnallisuuksia on tulossa, kuten esimerkiksi kolmiulotteisesta viivaelementistä tietyllä etäisyydellä olevan pisteen interpoloiva funktio.

Jos ennen versiota 2.5 on käyttänyt SQL-kyselyssään järjestämään kohteet geometrian mukaan  (ORDER BY geom), on se järjestänyt rivit X-koordinaatin mukaiseen järjestykseen. Uudessa versiossa PostGIS käsittelee kohteita niin, että toisiaan lähellä olevat kohteet ovat myös vastauksessa entistä “lähempänä” toisiaan ja myös algoritmin tehokkuutta on parannettu.

Lisää vielä merkittävämpiä uusia funktioita ja toiminnallisuuksia tulee varmasti seuraavissa 3.x versioissa. Tämän versiomuutoksen isoimmat vaikuttajat ovat taustalla tapahtuvia suorituskyvyn parannuksia ja uusien toiminnallisuuksien mahdollistajia.

Milloin kannattaa päivittää?

Kannattaako päivitys? Päivitys kannattaa aina. Varsinkin jos teet (työ)ajallasi jotain muuta kuin odotat SQL kyselyiden valmistuvan. Jo nyt voi olla hyvä aika lähteä kokeilemaan uusia ominaisuuksia omalla sandboxilla, jotta valmiin version ilmestyessä voi tehdä päivitykset myös  tuotantoympäristössä.

On aina tärkeä muistaa, että PostGIS on PostgreSQL:n laajennusosa. Isoimmat muutokset tehokkuuden parannuksessa ja uusissa toiminnallisuuksissa voidaan nähdäkin tulevan PostgreSQL:n kehityksen myötä. PostGIS 3.0 on tarkoitettu käytettäväksi yhdessä PostgreSQL:n version 12 kanssa, joten hyvä ajatus on päivittää molemmat samaan aikaan.

Jäämme siis jännityksellä odottamaan spatiaalisen datan murskauksen uusia mahdollisuuksia!

PostGIS kurssimme löydät täältä. Jos nyt aikatauluihisi sopivaa kurssia ei löydy, ole suoraan yhteydessä!

Blogikirjoitukseni (englanniksi) PostGISin perusteista löytyy täältä.

Vuoden 2019 FOSS4G-konferenssissa pidetty puheenvuoro PostGISin uusista ominaisuuksita on katsottavissa täällä.

Profiilikuva

Gispo

Gispo on suomalainen avoimen lähdekoodin paikkatietotalo, jonka palveluihin kuuluu paikkatietokonsultointia, sovelluskehitystä, koulutusta sekä ylläpitoa ja tukea.