Avrinningsområden Denna övning är inspirerad av Andreas, miljöinspektör i Lilla Edet med ansvar bland annat för inventering av enskilda avlopp. Andreas ville genomföra inventeringen per avrinningsområde, och hade till sin hjälp en papperskarta där någon nån gång hade ritat in ungefärliga avrinningsområden baserat på höjdkurvor. Kunde man hitta bättre underlag, tro? Vi började med att titta på SMHI:s avrinningsområden, men dessa var väl grova, eller stora, för Andreas behov. Lösningen hittade vi då i GRASS GIS rika flora av verktyg. Med hjälp av algoritmen r.watershed kunde vi själva bestämma hur stora avrinningsområden vi ville ha! Översiktlig beskrivning av övningen Denna övning går igenom hur man kan använda GRASS GIS och funktionen r.watershed för att ta fram avrinningsområden baserade på Lantmäteriets digitala höjdmodell. GRASS GIS är ett fristående GIS, som också ligger som en plugin i QGIS (GRASS toolbox). Många GRASS-algoritmer är också tillgängliga i QGIS Verktygslåda. Vi kommer att använda oss av Verktygslådan för denna övning. Vi kommer sedan jämföra resultatet med SMHI:s avrinningsområden, samt Fastighetskartans vattenlager, och avsluta med en liten diskussion kring datakvalitet och användbarhet. Om du är intresserad av avrinningsområden kan det vara bra att veta att Lantmäteriet och SMHI driver ett projekt som syftar till att ta fram nätverksbildade vattendrag över hela Sverige se mer på: http://www.lantmateriet.se/sv/om-lantmateriet/samverkan-med-andra/hydrografi-i-natverk Del 1 Öppna upp QGIS, och börja med att tala om för QGIS att vi kommer att jobba i Sweref 99 12:00. I menyn Inställningar, under Alternativ, fyll i värden under Referenskoordinatsystem enligt bilden nedan:
Algoritmen som vi skall använda för att ta fram avrinningsområden, r.watershed, kräver en del kräm i datorn för att flyta på bra. Detta beror på att den läser in allt underlagsdata i arbetsminnet och genomför beräkningarna där också. Man kan välja att arbeta mot hårddisken istället, men det tar betydligt längre tid. Därför har jag klippt ut ett mindre område ur Lantmäteriets höjdmodell som ligger i södra Lilla Edet, och sparat ner detta som en tiff-bild. Vi börjar med att lägga till denna rasterbild, som heter hojd_sodra_lillaedet.tif, och ligger i mappen Data, som du redan laddat ner:
När du öppnat rasterbilden bör det se ut ungefär som nedan i kartan. Det vita i mitten är Göta Älv. Nu är det dags att dra igång algoritmen r.watershed, som du hittar genom Verktygslådan. Om denna panel inte är synlig, öppnar du den genom Visa-menyn, under Paneler enligt bilden nedan:
Längst upp i Verktygslådan finns en liten sökruta skriv r.watershed här:
Dubbelklicka sedan på r.watershed för att öppna upp det fönster där du ställer in parametrar för verktyget. Vi anger 400000 celler som minsta storlek för exterior watershed basin. Då rastrets cellstorlek är 2*2 m innebär detta att minsta storlek för ett avrinningsområde blir 400000*2*2=1600000 kvadratmeter eller 160 ha. Det låter väl lagom? Övriga parametrar i översta delen av fönstret låter vi vara som de är höjdkällan är redan rätt angiven till hojd_sodra_lillaedet, och de övriga behöver vi inte ändra på: Övriga parametrar som skall anges är bara ett filnamn för de fyra översta resultatfilerna, enligt bilden nedan. Resterande parametrar låter vi vara som de är. De fyra sista resultatfilerna är vi inte intresserade av, så klicka ur knappen Lägg till utdata när algoritmen körts för dessa (Half-basin och nedåt). Klicka sedan Run och vänta ca 15 minuter medans datorn jobbar:
Såhär ser det ut när operationen är klar. R.watershed har snurrat färdigt med lyckat resultat, och vi har fyra nya lager i kartan:
Jag tycker att det är lite lättare att få överblick och snygg kartografi med vektordata än med rasterdata; därför konverterar vi basin och streamseg till vektorlager. För basin letar vi upp verktyget r.to.vect (sök efter detta i Verktygslådan). Vektorlagret döper vi till basin_v, och feature type sätter vi till area enligt fönstret nedan:
Vi gör samma sak med streamseg. Skapa lagret streamseg_v, men sätt feature type till line enligt bilden nedan. I en del fall kan man behöva köra algoritmen r.thin först, när man skall skapa linjevektorer av rasterbilder. R.thin plockar bort en pixel i taget från linjeobjekt i rastret, utifrån och in, tills vi har en linje som är bara en pixel tjock kvar. I just detta fall är dock redan linjen tillräckligt tunn för att r.to.vect skall kunna skapa linjevektorer av rastret: Efter lite pill med lagerstilarna kan det då se ut såhär i kartan, när basin_v och streamseg_v är tända:
Varje avrinningsområde i basin_v har ett motsvarande vattendrag i streamseg_v, ett vattendrag per avrinningsområde. Detta motsvarar dräneringslinjen från avrinningsområdet, alltså den lägsta sammanhängande sluttande linjen ut ur avrinningsområdet. Där basin_v skärs av streamseg_v har vi också avrinningsområdets mynning. Streamseg bör, i och med att det utgör varje avrinningsområdes lågpunkt, också motsvara verkliga vattendrag. Då varje basin bara har ett streamseg kommer dock streamseg inte innehålla ALLA vattendrag, lite mer om det nedan. Sådär, det gick ju snabbt och enkelt! Avslutande frågeställningar Jämför gärna ditt resultat med fastighetskartans vattenlager hl_1462.shp och mv_1462.shp som du hittar i övningskatalogen Data. Där finns också en lagerdefinitionsfil, SMHI_avro, som du kan dra in i kartfönstret den refererar till SMHI:s huvud-och delavrinningsområdes- WMS, lagret Huvud- och delavrinningsområden SVAR 2012_2: http://opendataview.smhi.se/smhi_vatten/wms?layers=smhi_huvud_och_delavrinningsomraden_svar2008_2 Hur ser det ut om man jämför?
Titta på området runt koordinaterna 158858 6438288. Ser det skumt ut? Tänd Lantmäteriets topowebbkarta (finns som qlr-fil enligt ovan). Varför har det blivit såhär? Fundera på vilken data som är mest exakt! Hur har SMHI tagit fram sina avrinningsområden? Hur har vattendragen karterats i Fastighetskartan? Vilka antaganden och förenklingar ligger bakom algoritmen för r.watershed? Hur noggrann är vår höjdmodell, och vad visar den? Vad händer i höjdmodellens kantområden? Det finns ett lager som heter numcells. Det kan användas till att skapa ett mer detaljerat vattendragsnätverk än streamseg, kan man säga rent faktiskt innehåller det värden för ackumulation för varje enskild cell. Om värdet är negativt betyder det att r.watershed tror att värdet är underskattat, beroende på att avrinningsområdet i verkligheten är större än höjdmodellen. Sätt en lämplig stil på detta raster och jämför med hl_1462! Vi har bara använt oss av enklast möjliga inställningar när vi kört r.watershed. Bland annat har vi antagit att alla celler bara avvattnas åt ett håll, det håll där den största höjdskillnaden cellerna emellan föreligger detta kallas Single Flow Direction, SFD. Verktyget stöder också användandet av Multiple Flow Direction, MFD, och då anger man också ett värde för hur fördelningen skall se ut de mottagnade cellerna emellan, konvergensen så att säga. Vidare har vi bara tillåtit avvattning i horisontal- och vertikalled i rutmönstret, ej diagonalt. Om du vill kan du testa hur resultatet blir om du skruvar på dessa parametrar. Del 2 Det finns flera andra hydrologiska algoritmer i GRASS. Bland annat finns en algoritm som heter v.carve, som tar ett vektorlager med riktiga vattendrag och karvar ut rännor för dessa i höjdmodellen. Det finns också en algoritm som heter r.water.outlet, som vi ska titta lite närmare på här. Det vore kanske användbart att kunna klicka i kartan och få fram ALL den markyta som avvattnas till just den punkten. Avrinningsområden sitter ju ihop i en lång kedja, som till slut mynnar i havet (i de flesta fall). R.water.outlet hjälper oss med detta. Algoritmen behöver input i form av drainage direction, avvattningsriktning. R.watershed ger bland annat detta som output, det är filen som vi har sparat som draindir ovan. Du hittar algoritmen r.water.outlet i verktygslådan. Input är ett raster med drainage direction, och ett koordinatpar som beskriver punkten vars avrinningsområde du vill ha reda på. OBSERVERA att punkten måste ligga på ett stream segment för att du ska få ett resultat! Exempel på parametrar ser du i bilden nedan:
Resultatet blir då såhär: