Bli med på å feire PostGIS dag med QGIS Norge

QGIS Norge inviterer til en online workshop på PostGIS dagen, 18. November 2021 fra kl 09:30 til 12:00.

Det er den første i en serie av workshops som fokuserer på bruk av QGIS sammen med PostGIS.

Foreløpig program er:

  • QGIS Norge nyheter
  • Installasjon av PostgreSQL/PostGIS på Windows
  • Koble til databasen i:
    • QGIS
  • Data inn i databasen
    • QGIS – DB manager
    • Processing

Deltakelsen er gratis. Påmelding

Lynnedslagsdata fra MET – del 4, lagre i PostGIS

I Skaff og bruk lynnedslagsdata fra met.no beskrev jeg hvordan man henter inn lynnedslagsdata og lagrer dem i en tekstfil som kan brukes i QGIS. For å gjøre rutinemessige analyser av lynnedslagsdata, henter vi data fra MET med jevne mellomrom og lagrer dem i en PostGIS-tabell.

create table lightning (
   timestamp timestamp with time zone not null,
   point geometry(POINT,25833) not null,
   peakcurr integer not null,
   multiplicy integer not null,
   sensors integer not null,
   dof integer not null,
   angle numeric(7,3) not null,
   semimaj numeric(6,3) not null,
   semimin numeric(6,3) not null,
   chi2 numeric(5,3) not null,
   risetime numeric(3,1) not null,
   peak2zerotime numeric(6,2) not null,
   maksror numeric(6,2) not null,
   cloud boolean not null,
   angleind boolean not null,
   signalind boolean not null,
   timingind boolean not null,
   ellipse geometry(POLYGON,25833),
   primary key (timestamp,point)
);

Scriptet som kjøres for å hente inn data, kan hentes som en gist fra github. Det er en pythonfil som henter data fra Frost, lagrer hvert punkt som en geometri i PostGIS, deretter beregnes usikkerhetsellipsene og lagres i samme tabell. Hver rad i tabellen inneholder da to geometrier. Når vi skal laste inn en slik tabell i QGIS, vil hver geometri komme som en rad i oversikten:

Ligthningtabellen listes to ganger i QGIS, en gang for hver geometritype

Det er da mulig å legge inn to lag i QGIS, et for punktene og et for usikkerhetsellipsene. Det er imidlertid et par problemer med dette. I tillegg til at et datasett vises som to separate lag, er det ikke mulig å samsortere tegning av punkter og usikkerhetsellipser. For eksempel vil man ofte ønske å lage et kart med de nyeste dataene øverst. Med punkter og ellipser i hvert sitt lag, vil da alle punkter komme oppå alle ellipser, eller motsatt.

Det er imidlertid mulig i QGIS å definere et lag hvor en geometri er en bit av dekorasjonen på en annen geometri. Når disse to ligger i samme rad i en PostGIS database, er det da (nesten) så enkelt som å hente ut en feltverdi.

Her blir usikkerhetsellipsen tegnet opp med nedslagspunktet som en dekorasjon

Dersom man ønsker å bruke usikkerhetsellipsen for overlay i QGIS, må dette være datapunktet som plottes i utgangspunktet. Velg lightning raden med polygongeometri. For å legge inn punktet i dette, legg til et lag til i symbolet, sett typen til Geometry generator og skriv inn følgende tekst:

geom_from_wkt( string_to_array(«point»,’;’)[1] )

Punktet vises som en wkt-tekst, men har projeksjonsinfo som et prefix skilt fra wkt-teksten med et semikolon. Derfor er det nødvendig med en string_to_array som deler på «;» og plukker ut det andre elementet. geom_from_wkt lager da punktgeometrien.

Dersom man ønsker å plotte punktet med ellipsen rundt, er det samme fremgangsmåte, men «geometry type» må settes til «Polygon / Multipolygon» og teksten som skrives inn må i stedet være

geom_from_wkt( string_to_array(«ellipse»,’;’)[1] )

«point» og «ellipse» i eksemplene over har ikke noe å gjøre med geometritypene, men er henvisninger til kolonnenavnene i PostGIS.

Legg også merke til at dersom feltet er definert som «geography» og ikke «geometry» er ikke projeksjonen med i feltet (i og med at geography håndterer uprojiserte data) så da bruker man geom_from_wkt(«<feltnavn>») direkte uten noe string_to_array.