Lei av rutenett? Kjappe hex-grid med PostGIS

Rutenett er en veldig vanlig måte å presentere aggregerte data i kartet på. Statistisk Sentralbyrå bruker blant annet dette aktivt og har et offisielt rutenett over Norge som man kan laste ned. Rutenettet er, ikke overraskende, formet som kvadrater når de blir tegnet i UTM33-projeksjonen.

Fordelen med et kvadratisk rutenett er jo at det er ekstremt enkelt å lage og samtidig få til at alle rutene har det samme arealet innenfor en projeksjon. Men, når man skal telle opp fenomener innenfor disse rutene så er det ofte at fenomenet ikke passer til firkantrutene. Dette kan jo løses ved å ha mindre ruter, altså høyere oppløsning og flere ruter totalt sett. Ofte kvadrerer man størrelsen på antall ruter, noe som fører til millioner av ruter.

ssb_grid

(ssb: https://www.ssb.no/a/publikasjoner/pdf/notat_200222/notat_200222.pdf)

For å slippe dette, og samtidig ikke være så firkantet, så kan vi lage hexagoner. Hexagoner er rett og slett en sekskant – men det er også en tilnærming til en sirkel, som ofte representerer romlige fenomen bedre.

Et hexagon-grid kan man lage i PostGIS og utnytte de fantastiske egenskapene PostGIS har med smarte indekser og summeringsmetoder. Etter litt undersøkelser rundt forbi, kom jeg over en som hadde en nesten ferdig metode for å gjøre dette. Etter litt tilpasning av koden til Rex Douglas (http://rexdouglass.com/spatial-hexagon-binning-in-postgis/) fikk jeg satt opp en massevis av hexagon-rutenett i forskjellige størrelser. Og det går fort – veldig fort! Eksempelvis er det ingen problemer med verdensdekkende 5-graders eller til og med 0.25-graders rutenett.

world_5deg

0.25_deg

Men vi vil jo telle noe og visualisere det. Vi kan for eksempel lage et PostGIS-view som dynamisk teller alle turisthytter innenfor griddet. Dette kan vi ta inn i QGIS og visualisere. Det blir jo mye kulere enn firkantruter!

turisthytte

Hvis vi skal telle litt større data og vil beholde hastigheten kan vi lage oss en ferdig opptelt tabell – for eksempel over bygningspunkter og visualisere det. Da går det lynraskt i QGIS, men vi må oppdatere tellingen når det kommer nye data.

byggpkt_025 byggpkt_ruter

Har du lyst til å prøve litt selv? Eller liker du bare å se litt kode? Alt sammen ligger ute som en gist her: https://gist.github.com/alexanno/0cb7207bc4c6ca90bc75

Sjekk også ut Ragnvald Larsen sitt arbeid rundt rutenett for WGS84: http://www.mindland.com/wp/projects/quarter-degree-grid-cells/about-qdgc/

Det er enda litt igjen på forbedringer og optimalisering av hex-rutenettet – men kom gjerne med bidrag og forbedringer!

 

 

 

Hvordan koble PostGIS til QGIS

qgis-med-datalag

PostGIS er en ekstremt kraftig og rask database for lagring, analyse og lesing av kartdata. QGIS og PostGIS er veldig gode venner. Med QGIS sin utrolig raske opptegning, og PostGIS sin dynamiske forenkling av geometrier – så kan vi laste inn millioner av objekter i en database og tegne de opp på sekunder i QGIS. Første steg er å koble en PostGIS-database til QGIS. Det er ganske enkelt:

i0yox

 

De viktige parameterene er: “host”, “database”, “username”, “password”. Den nederste parameteren: “use estimated table metadata” er smart for store og mange tabeller – da går alt raskere ved tilkobling.

postgis-qgis-params

Nå kan du legge til nye lag (tabeller) direkte fra databasen ved å koble til ved: “connect”. Så kan du legge til ved å velge de tabellene du vil og trykke “add”.

postgis-add

Et triks for “power users” er å bruke “DB Manager” i stedet for “add PostGIS Layer”. DB Manager er fungerer som en katalog over databasetilkoblingene dine – veldig likt som ArcCatalog. Her kan du høyreklikke på tabellene dine og velge “add to Canvas”. DB Manager er raskere og gir oss litt mer informasjon. Vi kan også se direkte på data i tabellene som ikke har geometri – som kodelister og lignende.

postgis-dbmanager

Lykke til med å bruke en ordentlig database som grunnlag for dataene dine i QGIS!