Lantmäteriets nedladdningsbara öppna data levereras i komprimerade filer som Esri shape. Det är ett effektivt sätt att paketera och skicka filerna, och så länge Esri själva är så urusla på att stödja GeoPackage så kommer vi att få leva med detta leveransformat. Och nej, fildatabas är inte bättre!
Hur kan man då göra om man med jämna mellanrum vill uppdatera de vektordata som finns tillgängliga lokalt på den egna datorn? Det tänkte jag kika lite närmare på här.
QGIS kan utan problem läsa shape i komprimerade filer, även om det känns som det går lite långsammare än med uppackade filer. Det vore därför bra om man kunde hantera ”paketen” med data utan att behöva packa upp dessa. Då är det bara att byta det gamla paketet mot ett nytt.
Det är inga problem att lägga till de lager man vill ha med i kartan från panelen datakällor, och som sagt utan att behöva packa upp dessa.
Stilsättningen av de mest relevanta lagren gör man sedan på egen hand, eller så hämtar man färdiga stilar från https://github.com/qgissverige/kartografi.
Den som inte har applicerat en färdig stil på ett lager tidigare skall veta att man gör det i inställningarna för lagrets egenskaper. I nederkant finns en ”Stil” knapp där man kan läsa in en stil från en fil. I en vanlig filväljardialog så pekar man ut den stilfil som skall kopplas till varje lager.
När allt är klart så har man sin karta färdig. Så vad är problemet?
Förutom att det är ganska många steg för att komma hit, så kanske man har valt att endast hämta data för ett län. Det går ju betydligt snabbare att rita ut en sådan än zip-filen för hela Sverige. Då kanske man vill slippa göra om samma sak för alla län, om man lägger till flera samtidigt i ett projekt.
Genom att gruppera alla lager och exempelvis döpa dessa till ”Terrängkartan_06” (Jönköpings län), så kommer vi lite närmare en lösning.
Genom att högerklicka på lagergruppen kan man välja att exportera den som en lagerdefinitionsfil. Då jag använt mig av Jönköpings län här så döper jag min fil till tk_06_qgis_style.qlr.
Denna fil är en vanlig textfil som kan öppnas i en vanlig texteditor och redigeras.
Som synes i bilden ovan så finns sökvägarna till data presenterade väldigt tidigt i filen. Man vad har vi för nytta av det.
Jo om jag nu hämtar zip-filen för Kronobergs län, så heter denna ”tk_07_Sweref_99_TM_shape.zip”, med lager som heter något med ”07”.
Med ett enda sök och ersätt kommando så kan man tänka sig att byta ut ”06” mot ”07” och spara filen som ”tk_07_qgis_style.qlr”. Men detta leder till problem med exempelvis texter som ”EPSG:3006”. Det är däremot lite mer ovanligt att kombinationerna ”_06” och ”/06” förekommer i andra sammanhang.
Genom två sök och ersätt, ett från ”_06” till ”_07” och ett från ”/06” till ”/07”, så kommer det dock att fungera.
Den nya filen kan jag sedan hämta in via panelen datakällor och direkt få in Kronobergs län stilsatt och klart.
Gränsen mellan länen presenteras sömlöst i kartan, men separerat i två olika lagergrupper.
Om man vill kan man skapa en ”mall” fil där man exempelvis byter ut alla relevanta siffror (i mitt fall 06 eller 07) till någon ”unik” teckenkombination som ”{länssiffra}”. Då kan man direkt söka efter och ersätta denna text i ett steg med sök och ersätt.
Det går även att skapa ett skript som gör detta åt oss…
Beroende på om man använder Windows, MacOS eller Linux så kan man skriva ett anpassat terminalskript för det, men det kan vara mer naturligt att skapa ett Pythonskript, vilket fungerar för alla operativsystem.
#!/usr/bin/env python3 print("Ange länssiffra (format 06):") lanssiffra = input() f = open("tk_qgis_style.qlr",'r') stildata = f.read() f.close() nyttlan = stildata.replace("{länssiffra}",lanssiffra) f = open("tk_" + lanssiffra + "_qgis_style.qlr",'w') f.write(nyttlan) f.close()
Mer omfattande än såhär behöver det inte vara. När jag kör skriptet från samma plats som min ”mall stil” så frågar skriptet efter önskad länssiffra och sedan skapas en ny fil med denna information. Den nya qlr-filen kan sedan sparas tillsammans med zip-filen och användas för att lägga till just det aktuella länet i QGIS, i ett enda steg.
Jag kan självklart utveckla skriptet så att det i stället för att fråga efter länssiffra loopar igenom alla siffror och genom att anropa en process liknande ursprungsskriptet så kan samtliga länsstilar skapas på en gång. Jag tror dock att det här räcker ganska långt för de flesta.
Samma princip kan tillämpas för övriga vektorkartor också, men det är nog framför allt just terrängkartan (och kanske vägkartan) som det blir tillämpbart.
Vill du inte göra allt detta själv? Hämta mina filer så har du något att börja med:
https://raw.githubusercontent.com/klakar/geosupportsystem/master/tk_qgis_style.py
https://raw.githubusercontent.com/klakar/geosupportsystem/master/tk_qgis_style.qlr
De filer som genereras när du kör pythonskriptet skall sparas på samma plats som den nedladdade zip-filen för respektive län. Det fungerar däremot inte för filen med hela Sverige, och endast för just Terrängkartan.
- Nu kan man enkelt byta ut en gammal läns-zip mot en ny.
- Man slipper packa upp filerna.
- Det går skapligt snabbt att rita ut kartan jämfört med att använda hela Sverige.
- Du behöver inte heller peka om lager för lager när du lägger till ett nytt län, kör bara skriptet och skapa en ny länsstil.
- Vill man ändra något så behöver man bara ändra i en enda stilfil, även om man kan behöva trixa lite för att skapa en mall där man byter ut texter i stilfilen till ”utbytestexten”.
Tips
Se till att du kryssat ur inställningen för att ignorera teckenkodningsinställning i shapefiler. Annars så riskerar stilar att missas och etiketter att bli konstiga. Inställningen gör du i programinställningarna under datakällor.
Om du jobbar med Lantmäteriets data så bör du alltid göra denna inställning i QGIS.
Tack för en mycket lärorik och bra beskrivning!
/Michael (f.d. Eksjöbo, numera Uppsalabo med GIS som ‘hobby’)