Ladda SMHI klimatdata
SMHI har på sin hemsida en kartapplikation där många klimatindikationer finns samlade i ett nordentäckande rutnät.
I ett första skede så laddades ettan ett antal teman från klimatdata ner ochlagrades i tabellen smhi_rutnät. Värderna som är lagrade är avvikelser från normalvärden.
Varje tema består av nio klumner, tre scenarier och tre perioder:
Utsläpps-scenarier
rpc2.6
rpc4.5
rpc8.5
Perioder
2011-2040
2041-2070
2071-2100
Teman:
Torra dygn dd
Frostdygn fd
Vegitationsdygn gsl
Nederbord dygn per år pr
Kraftig nederbörd dygn r10mm
Extrem nederbörd r20mm
Dygnsmedeltempratur tas
Ny laddning av klimatdata med absoluta värden
Här beskrivs rutin för att ladda ner klimatdata som normalvärden. Metoden är inte automatiserad men är ändå effektiv. Det som tar lite tid är att skriva SQL-frågorna första gången
Ladda ner
SMHI fördjupad klimatscenariotjänst används för att ladda ner lager efter lager. För varje tema laddas nio lager ner för varje scenario respective period. Bilden visar nedladdning av temat frostdagar. Innehållet i varje -zip fil shape filer. Projektion är 3006 (SWEREF 99 TM)
Lägg in filerna QGIS
Starta QGIS med kartföntret inställt i 3006. Markera alla de nio filerna för ett tema och dra dem in från filhanterare till lagerlistan. QGIS tar alla .zip filer och packar upp dem till lager från Shape-filer. Låt namnen vara som filerna.
Flytta lagren till Posgresdatabasen från QGIS
Se till att Postgres-databasen är öppen. Skapa ett temporärt schema t.ex. SMHI
Markera alla de nio lagren från temat och dra dem upp till schema-namnet i Postgres. Det blir tyst en lång stund men processen pågår att flytta lagren. Efter en lång stund meddelas att det är klart.
Fortsätt med alla sju teman.
För att snabba upp arbetet med inddatata så skapar vi index för dessa
--index drop INDEX if exists smhi.fd_r26_pe1_idx; drop INDEX if exists smhi.fd_r26_pe2_idx; drop INDEX if exists smhi.fd_r26_pe3_idx; drop INDEX if exists smhi.fd_r45_pe1_idx; drop INDEX if exists smhi.fd_r45_pe2_idx; drop INDEX if exists smhi.fd_r45_pe3_idx; drop INDEX if exists smhi.fd_r85_pe1_idx; drop INDEX if exists smhi.fd_r85_pe2_idx; drop INDEX if exists smhi.fd_r85_pe3_idx; --tempratur drop INDEX if exists smhi.pr_r26_pe1_idx; drop INDEX if exists smhi.pr_r26_pe2_idx; drop INDEX if exists smhi.pr_r26_pe3_idx; drop INDEX if exists smhi.pr_r45_pe1_idx; drop INDEX if exists smhi.pr_r45_pe2_idx; drop INDEX if exists smhi.pr_r45_pe3_idx; drop INDEX if exists smhi.pr_r85_pe1_idx; drop INDEX if exists smhi.pr_r85_pe2_idx; drop INDEX if exists smhi.pr_r85_pe3_idx; --nederbörd drop INDEX if exists smhi.r10mm_r26_pe1_idx; drop INDEX if exists smhi.r10mm_r26_pe2_idx; drop INDEX if exists smhi.r10mm_r26_pe3_idx; drop INDEX if exists smhi.r10mm_r45_pe1_idx; drop INDEX if exists smhi.r10mm_r45_pe2_idx; drop INDEX if exists smhi.r10mm_r45_pe3_idx; drop INDEX if exists smhi.r10mm_r85_pe1_idx; drop INDEX if exists smhi.r10mm_r85_pe2_idx; drop INDEX if exists smhi.r10mm_r85_pe3_idx; --kfr drop INDEX if exists smhi.r20mm_r26_pe1_idx; drop INDEX if exists smhi.r20mm_r26_pe2_idx; drop INDEX if exists smhi.r20mm_r26_pe3_idx; drop INDEX if exists smhi.r20mm_r45_pe1_idx; drop INDEX if exists smhi.r20mm_r45_pe2_idx; drop INDEX if exists smhi.r20mm_r45_pe3_idx; drop INDEX if exists smhi.r20mm_r85_pe1_idx; drop INDEX if exists smhi.r20mm_r85_pe2_idx; drop INDEX if exists smhi.r20mm_r85_pe3_idx; --xtr drop INDEX if exists smhi.xtr_r26_pe1_idx; drop INDEX if exists smhi.xtr_r26_pe2_idx; drop INDEX if exists smhi.xtr_r26_pe3_idx; drop INDEX if exists smhi.xtr_r45_pe1_idx; drop INDEX if exists smhi.xtr_r45_pe2_idx; drop INDEX if exists smhi.xtr_r45_pe3_idx; drop INDEX if exists smhi.xtr_r85_pe1_idx; drop INDEX if exists smhi.xtr_r85_pe2_idx; drop INDEX if exists smhi.xtr_r85_pe3_idx; --dd drop INDEX if exists smhi.dd_r26_pe1_idx; drop INDEX if exists smhi.dd_r26_pe2_idx; drop INDEX if exists smhi.dd_r26_pe3_idx; drop INDEX if exists smhi.dd_r45_pe1_idx; drop INDEX if exists smhi.dd_r45_pe2_idx; drop INDEX if exists smhi.dd_r45_pe3_idx; drop INDEX if exists smhi.dd_r85_pe1_idx; drop INDEX if exists smhi.dd_r85_pe2_idx; drop INDEX if exists smhi.dd_r85_pe3_idx; --vegp drop INDEX if exists smhi.gsl_r26_pe1_idx; drop INDEX if exists smhi.gsl_r26_pe2_idx; drop INDEX if exists smhi.gsl_r26_pe3_idx; drop INDEX if exists smhi.gsl_r45_pe1_idx; drop INDEX if exists smhi.gsl_r45_pe2_idx; drop INDEX if exists smhi.gsl_r45_pe3_idx; drop INDEX if exists smhi.gsl_r85_pe1_idx; drop INDEX if exists smhi.gsl_r85_pe2_idx; drop INDEX if exists smhi.gsl_r85_pe3_idx; --vegp drop INDEX if exists smhi.tas_r26_pe1_idx; drop INDEX if exists smhi.tas_r26_pe2_idx; drop INDEX if exists smhi.tas_r26_pe3_idx; drop INDEX if exists smhi.tas_r45_pe1_idx; drop INDEX if exists smhi.tas_r45_pe2_idx; drop INDEX if exists smhi.tas_r45_pe3_idx; drop INDEX if exists smhi.tas_r85_pe1_idx; drop INDEX if exists smhi.tas_r85_pe2_idx; drop INDEX if exists smhi.tas_r85_pe3_idx; -- fd frostdygn CREATE INDEX fd_r26_pe1_idx ON smhi."fd_ensmean_rcp26_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX fd_r26_pe2_idx ON smhi."fd_ensmean_rcp26_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX fd_r26_pe3_idx ON smhi."fd_ensmean_rcp26_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX fd_r45_pe1_idx ON smhi."fd_ensmean_rcp45_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX fd_r45_pe2_idx ON smhi."fd_ensmean_rcp45_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX fd_r45_pe3_idx ON smhi."fd_ensmean_rcp45_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX fd_r85_pe1_idx ON smhi."fd_ensmean_rcp85_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX fd_r85_pe2_idx ON smhi."fd_ensmean_rcp85_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX fd_r85_pe3_idx ON smhi."fd_ensmean_rcp85_ANN_30y_2071_2100.shp" USING GIST (geom); -- pr nederbord dygn per år CREATE INDEX pr_r26_pe1_idx ON smhi."pr_ensmean_rcp26_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX pr_r26_pe2_idx ON smhi."pr_ensmean_rcp26_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX pr_r26_pe3_idx ON smhi."pr_ensmean_rcp26_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX pr_r45_pe1_idx ON smhi."pr_ensmean_rcp45_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX pr_r45_pe2_idx ON smhi."pr_ensmean_rcp45_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX pr_r45_pe3_idx ON smhi."pr_ensmean_rcp45_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX pr_r85_pe1_idx ON smhi."pr_ensmean_rcp85_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX pr_r85_pe2_idx ON smhi."pr_ensmean_rcp85_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX pr_r85_pe3_idx ON smhi."pr_ensmean_rcp85_ANN_30y_2071_2100.shp" USING GIST (geom); -- r10mm kraftig nederbörd dygn per år CREATE INDEX r10mm_r26_pe1_idx ON smhi."r10mm_ensmean_rcp26_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX r10mm_r26_pe2_idx ON smhi."r10mm_ensmean_rcp26_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX r10mm_r26_pe3_idx ON smhi."r10mm_ensmean_rcp26_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX r10mm_r45_pe1_idx ON smhi."r10mm_ensmean_rcp45_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX r10mm_r45_pe2_idx ON smhi."r10mm_ensmean_rcp45_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX r10mm_r45_pe3_idx ON smhi."r10mm_ensmean_rcp45_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX r10mm_r85_pe1_idx ON smhi."r10mm_ensmean_rcp85_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX r10mm_r85_pe2_idx ON smhi."r10mm_ensmean_rcp85_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX r10mm_r85_pe3_idx ON smhi."r10mm_ensmean_rcp85_ANN_30y_2071_2100.shp" USING GIST (geom); -- r20mm extremt kraftig nederbörd dygn per år CREATE INDEX r20mm_r26_pe1_idx ON smhi."r20mm_ensmean_rcp26_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX r20mm_r26_pe2_idx ON smhi."r20mm_ensmean_rcp26_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX r20mm_r26_pe3_idx ON smhi."r20mm_ensmean_rcp26_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX r20mm_r45_pe1_idx ON smhi."r20mm_ensmean_rcp45_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX r20mm_r45_pe2_idx ON smhi."r20mm_ensmean_rcp45_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX r20mm_r45_pe3_idx ON smhi."r20mm_ensmean_rcp45_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX r20mm_r85_pe1_idx ON smhi."r20mm_ensmean_rcp85_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX r20mm_r85_pe2_idx ON smhi."r20mm_ensmean_rcp85_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX r20mm_r85_pe3_idx ON smhi."r20mm_ensmean_rcp85_ANN_30y_2071_2100.shp" USING GIST (geom); -- dd CREATE INDEX dd_r26_pe1_idx ON smhi."dd_ensmean_rcp26_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX dd_r26_pe2_idx ON smhi."dd_ensmean_rcp26_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX dd_r26_pe3_idx ON smhi."dd_ensmean_rcp26_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX dd_r45_pe1_idx ON smhi."dd_ensmean_rcp45_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX dd_r45_pe2_idx ON smhi."dd_ensmean_rcp45_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX dd_r45_pe3_idx ON smhi."dd_ensmean_rcp45_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX dd_r85_pe1_idx ON smhi."dd_ensmean_rcp85_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX dd_r85_pe2_idx ON smhi."dd_ensmean_rcp85_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX dd_r85_pe3_idx ON smhi."dd_ensmean_rcp85_ANN_30y_2071_2100.shp" USING GIST (geom); -- gsl vegetationsperiodens längd dygn per år CREATE INDEX gsl_r26_pe1_idx ON smhi."gsl_ensmean_rcp26_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX gsl_r26_pe2_idx ON smhi."gsl_ensmean_rcp26_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX gsl_r26_pe3_idx ON smhi."gsl_ensmean_rcp26_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX gsl_r45_pe1_idx ON smhi."gsl_ensmean_rcp45_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX gsl_r45_pe2_idx ON smhi."gsl_ensmean_rcp45_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX gsl_r45_pe3_idx ON smhi."gsl_ensmean_rcp45_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX gsl_r85_pe1_idx ON smhi."gsl_ensmean_rcp85_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX gsl_r85_pe2_idx ON smhi."gsl_ensmean_rcp85_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX gsl_r85_pe3_idx ON smhi."gsl_ensmean_rcp85_ANN_30y_2071_2100.shp" USING GIST (geom); -- gsl vegetationsperiodens längd dygn per år CREATE INDEX tas_r26_pe1_idx ON smhi."tas_ensmean_rcp26_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX tas_r26_pe2_idx ON smhi."tas_ensmean_rcp26_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX tas_r26_pe3_idx ON smhi."tas_ensmean_rcp26_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX tas_r45_pe1_idx ON smhi."tas_ensmean_rcp45_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX tas_r45_pe2_idx ON smhi."tas_ensmean_rcp45_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX tas_r45_pe3_idx ON smhi."tas_ensmean_rcp45_ANN_30y_2071_2100.shp" USING GIST (geom); CREATE INDEX tas_r85_pe1_idx ON smhi."tas_ensmean_rcp85_ANN_30y_2011_2040.shp" USING GIST (geom); CREATE INDEX tas_r85_pe2_idx ON smhi."tas_ensmean_rcp85_ANN_30y_2041_2070.shp" USING GIST (geom); CREATE INDEX tas_r85_pe3_idx ON smhi."tas_ensmean_rcp85_ANN_30y_2071_2100.shp" USING GIST (geom);
Skapa tabellen smhi_rutor_absolute
Det fins redan en tabell där alla attribut finns för 8 teman som heter smhi_rutor. Kolumnnamnen är avkortade. Strävan är nu att skap en lika tabell men med absoluta värden. Det ny tabellen skapas efter SQL som beskrivs nedan
Kolumnerna i smhi_rutor_absolute har ändrats så att första delen av namnet nu är lika med kolumnnamnet i indatatabellerna från SMHI. Tex frostdyngn: forstd har bytts ut mot fd
Utångstabellen för alla lager och teman är fd_r26_pe1
. Första kolumnen är Id och sista geom. Denna tabell är den enda med from (rad 12). Alla övriga är en spatial join på rutan.
När ett eller alla teman är klara så för frågan i ovanstående create table skfab_climate_24.smhi_rutnat_absolute
drop table if exists skfab_climate_24.smhi_rutnat_absolute; CREATE TABLE skfab_climate_24.smhi_rutnat_absolute ( id serial primary key, geom public.geometry(multipolygon, 3006) NULL, dd_r26_pe1 float8 NULL, dd_r26_pe2 float8 NULL, dd_r26_pe3 float8 NULL, dd_r45_pe1 float8 NULL, dd_r45_pe2 float8 NULL, dd_r45_pe3 float8 NULL, dd_r85_pe1 float8 NULL, dd_r85_pe2 float8 NULL, dd_r85_pe3 float8 NULL, fd_r26_pe1 float8 NULL, fd_r26_pe2 float8 NULL, fd_r26_pe3 float8 NULL, fd_r45_pe1 float8 NULL, fd_r45_pe2 float8 NULL, fd_r45_pe3 float8 NULL, fd_r85_pe1 float8 NULL, fd_r85_pe2 float8 NULL, fd_r85_pe3 float8 NULL, gsl_r26_pe1 float8 NULL, gsl_r26_pe2 float8 NULL, gsl_r26_pe3 float8 NULL, gsl_r45_pe1 float8 NULL, gsl_r45_pe2 float8 NULL, gsl_r45_pe3 float8 NULL, gsl_r85_pe1 float8 NULL, gsl_r85_pe2 float8 NULL, gsl_r85_pe3 float8 NULL, pr_r26_pe1 float8 NULL, pr_r26_pe2 float8 NULL, pr_r26_pe3 float8 NULL, pr_r45_pe1 float8 NULL, pr_r45_pe2 float8 NULL, pr_r45_pe3 float8 NULL, pr_r85_pe1 float8 NULL, pr_r85_pe2 float8 NULL, pr_r85_pe3 float8 NULL, r10mm_r26_pe1 float8 NULL, r10mm_r26_pe2 float8 NULL, r10mm_r26_pe3 float8 NULL, r10mm_r45_pe1 float8 NULL, r10mm_r45_pe2 float8 NULL, r10mm_r45_pe3 float8 NULL, r10mm_r85_pe1 float8 NULL, r10mm_r85_pe2 float8 NULL, r10mm_r85_pe3 float8 NULL, r20mm_r26_pe1 float8 NULL, r20mm_r26_pe2 float8 NULL, r20mm_r26_pe3 float8 NULL, r20mm_r45_pe1 float8 NULL, r20mm_r45_pe2 float8 NULL, r20mm_r45_pe3 float8 NULL, r20mm_r85_pe1 float8 NULL, r20mm_r85_pe2 float8 NULL, r20mm_r85_pe3 float8 NULL, tas_r26_pe1 float8 NULL, tas_r26_pe2 float8 NULL, tas_r26_pe3 float8 NULL, tas_r45_pe1 float8 NULL, tas_r45_pe2 float8 NULL, tas_r45_pe3 float8 NULL, tas_r85_pe1 float8 NULL, tas_r85_pe2 float8 NULL, tas_r85_pe3 float8 NULL ); drop index if exists skfab_climate_24.smhi_rutnat_absolute_id_idx; CREATE INDEX smhi_rutnat_absolute_idx ON skfab_climate_24.smhi_rutnat_absolute USING GIST (geom); -- let frost dasy fd be the crateinon of the grid INSERT INTO skfab_climate_24.smhi_rutnat_absolute (id, fd_r26_pe1, fd_r26_pe2, fd_r26_pe3, fd_r45_pe1, fd_r45_pe2, fd_r45_pe3, fd_r85_pe1, fd_r85_pe2, fd_r85_pe3, geom) (select fd_r26_pe1.id as id, fd_r26_pe1.fd as fd_r26_pe1, fd_r26_pe2.fd as fd_r26_pe2, fd_r26_pe3.fd as fd_r26_pe3, fd_r45_pe1.fd as fd_r45_pe1, fd_r45_pe2.fd as fd_r45_pe2, fd_r45_pe3.fd as fd_r45_pe3, fd_r85_pe1.fd as fd_r85_pe1, fd_r85_pe2.fd as fd_r85_pe2, fd_r85_pe3.fd as fd_r85_pe3, fd_r26_pe1.geom from smhi."fd_ensmean_rcp26_ANN_30y_2011_2040.shp" fd_r26_pe1 join smhi."fd_ensmean_rcp26_ANN_30y_2041_2070.shp" fd_r26_pe2 on ST_Contains( fd_r26_pe1.geom, fd_r26_pe2.geom) join smhi."fd_ensmean_rcp26_ANN_30y_2071_2100.shp" fd_r26_pe3 on ST_Contains( fd_r26_pe1.geom, fd_r26_pe3.geom) join smhi."fd_ensmean_rcp45_ANN_30y_2011_2040.shp" fd_r45_pe1 on ST_Contains( fd_r26_pe1.geom, fd_r45_pe1.geom) join smhi."fd_ensmean_rcp45_ANN_30y_2041_2070.shp" fd_r45_pe2 on ST_Contains( fd_r26_pe1.geom, fd_r45_pe2.geom) join smhi."fd_ensmean_rcp45_ANN_30y_2071_2100.shp" fd_r45_pe3 on ST_Contains( fd_r26_pe1.geom, fd_r45_pe3.geom) join smhi."fd_ensmean_rcp85_ANN_30y_2011_2040.shp" fd_r85_pe1 on ST_Contains( fd_r26_pe1.geom, fd_r85_pe1.geom) join smhi."fd_ensmean_rcp85_ANN_30y_2041_2070.shp" fd_r85_pe2 on ST_Contains( fd_r26_pe1.geom, fd_r85_pe2.geom) join smhi."fd_ensmean_rcp85_ANN_30y_2071_2100.shp" fd_r85_pe3 on ST_Contains( fd_r26_pe1.geom, fd_r85_pe3.geom) ); --update tas dygnsmedeltemperatur per år UPDATE skfab_climate_24.smhi_rutnat_absolute a SET tas_r26_pe1=b.tas from smhi."tas_ensmean_rcp26_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET tas_r26_pe2=b.tas from smhi."tas_ensmean_rcp26_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET tas_r26_pe3=b.tas from smhi."tas_ensmean_rcp26_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET tas_r45_pe1=b.tas from smhi."tas_ensmean_rcp45_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET tas_r45_pe2=b.tas from smhi."tas_ensmean_rcp45_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET tas_r45_pe3=b.tas from smhi."tas_ensmean_rcp45_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET tas_r85_pe1=b.tas from smhi."tas_ensmean_rcp85_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET tas_r85_pe2=b.tas from smhi."tas_ensmean_rcp85_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET tas_r85_pe3=b.tas from smhi."tas_ensmean_rcp85_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); --pr nederbord dygn per år UPDATE skfab_climate_24.smhi_rutnat_absolute a SET pr_r26_pe1=b.pr from smhi."pr_ensmean_rcp26_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET pr_r26_pe2=b.pr from smhi."pr_ensmean_rcp26_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET pr_r26_pe3=b.pr from smhi."pr_ensmean_rcp26_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET pr_r45_pe1=b.pr from smhi."pr_ensmean_rcp45_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET pr_r45_pe2=b.pr from smhi."pr_ensmean_rcp45_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET pr_r45_pe3=b.pr from smhi."pr_ensmean_rcp45_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET pr_r85_pe1=b.pr from smhi."pr_ensmean_rcp85_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET pr_r85_pe2=b.pr from smhi."pr_ensmean_rcp85_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET pr_r85_pe3=b.pr from smhi."pr_ensmean_rcp85_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); --r10mm kraftig nederbörd dygn per år UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r10mm_r26_pe1=b.r10mm from smhi."r10mm_ensmean_rcp26_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r10mm_r26_pe2=b.r10mm from smhi."r10mm_ensmean_rcp26_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r10mm_r26_pe3=b.r10mm from smhi."r10mm_ensmean_rcp26_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r10mm_r45_pe1=b.r10mm from smhi."r10mm_ensmean_rcp45_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r10mm_r45_pe2=b.r10mm from smhi."r10mm_ensmean_rcp45_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r10mm_r45_pe3=b.r10mm from smhi."r10mm_ensmean_rcp45_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r10mm_r85_pe1=b.r10mm from smhi."r10mm_ensmean_rcp85_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r10mm_r85_pe2=b.r10mm from smhi."r10mm_ensmean_rcp85_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r10mm_r85_pe3=b.r10mm from smhi."r10mm_ensmean_rcp85_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); --r20mm xtremt kraftig nederbörd dygn per år UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r20mm_r26_pe1=b.r20mm from smhi."r20mm_ensmean_rcp26_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r20mm_r26_pe2=b.r20mm from smhi."r20mm_ensmean_rcp26_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r20mm_r26_pe3=b.r20mm from smhi."r20mm_ensmean_rcp26_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r20mm_r45_pe1=b.r20mm from smhi."r20mm_ensmean_rcp45_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r20mm_r45_pe2=b.r20mm from smhi."r20mm_ensmean_rcp45_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r20mm_r45_pe3=b.r20mm from smhi."r20mm_ensmean_rcp45_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r20mm_r85_pe1=b.r20mm from smhi."r20mm_ensmean_rcp85_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r20mm_r85_pe2=b.r20mm from smhi."r20mm_ensmean_rcp85_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET r20mm_r85_pe3=b.r20mm from smhi."r20mm_ensmean_rcp85_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); --gsl vegitation dygn per år UPDATE skfab_climate_24.smhi_rutnat_absolute a SET gsl_r26_pe1=b.gsl from smhi."gsl_ensmean_rcp26_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET gsl_r26_pe2=b.gsl from smhi."gsl_ensmean_rcp26_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET gsl_r26_pe3=b.gsl from smhi."gsl_ensmean_rcp26_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET gsl_r45_pe1=b.gsl from smhi."gsl_ensmean_rcp45_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET gsl_r45_pe2=b.gsl from smhi."gsl_ensmean_rcp45_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET gsl_r45_pe3=b.gsl from smhi."gsl_ensmean_rcp45_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET gsl_r85_pe1=b.gsl from smhi."gsl_ensmean_rcp85_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET gsl_r85_pe2=b.gsl from smhi."gsl_ensmean_rcp85_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET gsl_r85_pe3=b.gsl from smhi."gsl_ensmean_rcp85_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); --dd torra dygn per år UPDATE skfab_climate_24.smhi_rutnat_absolute a SET dd_r26_pe1=b.dd from smhi."dd_ensmean_rcp26_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET dd_r26_pe2=b.dd from smhi."dd_ensmean_rcp26_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET dd_r26_pe3=b.dd from smhi."dd_ensmean_rcp26_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET dd_r45_pe1=b.dd from smhi."dd_ensmean_rcp45_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET dd_r45_pe2=b.dd from smhi."dd_ensmean_rcp45_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET dd_r45_pe3=b.dd from smhi."dd_ensmean_rcp45_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET dd_r85_pe1=b.dd from smhi."dd_ensmean_rcp85_ANN_30y_2011_2040.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET dd_r85_pe2=b.dd from smhi."dd_ensmean_rcp85_ANN_30y_2041_2070.shp" b where ST_Contains( a.geom, b.geom); UPDATE skfab_climate_24.smhi_rutnat_absolute a SET dd_r85_pe3=b.dd from smhi."dd_ensmean_rcp85_ANN_30y_2071_2100.shp" b where ST_Contains( a.geom, b.geom); VACUUM FULL analyze skfab_climate_24.smhi_rutnat_absolute;
Innan frågan körs är det lämpligt att indexera de ingående tabellerna och även att ta bort index. Även här används kolumnnamnet så att det ska gå enkelt att göra systematisk omdöpning för övriga teman.
När tabellen smhi_rutor_absolute finns klar kan en ny fråga skapas för att användas i Geoserver för att ska kartografi.
ITH mms AS ( select greatest ( PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r26_pe1), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r26_pe2), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r26_pe3), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r45_pe1), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r45_pe2), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r45_pe3), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r85_pe1), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r85_pe2), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r85_pe3)) as g_frostd, least ( PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r26_pe1), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r26_pe2), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r26_pe3), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r45_pe1), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r45_pe2), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r45_pe3), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r85_pe1), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r85_pe2), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r85_pe3)) as l_frostd, greatest ( PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r26_pe1), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r26_pe2), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r26_pe3), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r45_pe1), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r45_pe2), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r45_pe3), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r85_pe1), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r85_pe2), PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY frostd_r85_pe3)) - least ( PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r26_pe1), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r26_pe2), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r26_pe3), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r45_pe1), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r45_pe2), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r45_pe3), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r85_pe1), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r85_pe2), PERCENTILE_CONT(0.01) WITHIN GROUP(ORDER BY frostd_r85_pe3)) as d_frostd from skfab_climate_24.skfab_climate_24.smhi_rutnat_absolute ), pro as ( -- calculate the procentage (0-100) from values select r.id, ((frostd_r26_pe1-mms.l_frostd)*100/mms.d_frostd)::integer as frostd_r26_pe1, ((frostd_r26_pe2-mms.l_frostd)*100/mms.d_frostd)::integer as frostd_r26_pe2, ((frostd_r26_pe3-mms.l_frostd)*100/mms.d_frostd)::integer as frostd_r26_pe3, ((frostd_r45_pe1-mms.l_frostd)*100/mms.d_frostd)::integer as frostd_r45_pe1, ((frostd_r45_pe2-mms.l_frostd)*100/mms.d_frostd)::integer as frostd_r45_pe2, ((frostd_r45_pe3-mms.l_frostd)*100/mms.d_frostd)::integer as frostd_r45_pe3, ((frostd_r85_pe1-mms.l_frostd)*100/mms.d_frostd)::integer as frostd_r85_pe1, ((frostd_r85_pe2-mms.l_frostd)*100/mms.d_frostd)::integer as frostd_r85_pe2, ((frostd_r85_pe3-mms.l_frostd)*100/mms.d_frostd)::integer as frostd_r85_pe3 from skfab_climate_24.skfab_climate_24.smhi_rutnat_absolute r , mms ) -- view the result select h.*, r.geom from skfab_climate_24.skfab_climate_24.smhi_rutnat_absolute r join pro h on h.id=r.id