Så fixar du SWEREF99TM med QGIS

I detta inlägg så tänkte jag visa ett exempel på hur du går till väga för att lägga till ett koordinatnät med SWEREF99TM koordinater på dina kartor när QGIS 2.12 nu släpps.

Släppdatum är på fredag för källkoden, sedan kan det variera hur lång tid det tar för installationspaket att bli tillgängliga för nedladdning. Normalt så brukar det ta upp till en vecka, men senast så släpade OS X versionen rejält.

Screenshot - 2015-10-17 - 10:35:57

Med nuvarande versioner av QGIS så är det bästa man kan göra som i bilden ovan. Det är ett koordinatnät med 1000 meters intervall i skala 1:100’000.

Om du vill läsa vidare så kommer du att få se hur du kan skapa koordinater som ser betydligt bättre ut direkt i QGIS (bilden nedan).

Screenshot - 2015-10-17 - 10:39:59

Med QGIS 2.12 så följer en möjlighet att välja ”Anpassade” koordinatetiketter. Det är dessa man tar till när man vill skriva ut koordinater på ett sätt som inte är fördefinierat i urvalslistan.

Screenshot - 2015-10-17 - 10:43:20

Eftersom det inte är fördefinierat så blir det lite extra arbete med anpassningen, men beroende på vilken ambition man har så behöver det inte bli så avancerat.

Screenshot - 2015-10-17 - 10:52:25

Det jag är intresserad av är siffror som beskriver hela kilometer upp till 99. Detta representeras av fjärde och femte siffran från höger (för att krångla till det). Öst och Nord koordinaterna är olika långa så det går inte att räkna från vänster med en och samma formel.

Det skulle gå att göra två formler och skilja på om det är ‘x’ eller ‘y’ i värdet på variabeln grid_axis. Men med lite kreativa val så behövs inte det.

Funktionen substr hämtar en del av en textsträng med början på en angiven position och ett angivet antal tecken frammåt.

Genom att räkna antalet tecken i varje koordinat (length(…) ) och dra bort 4 så får jag positionen för den första siffran av intresse oavsett hur många siffror koordinaten har. Sedan väljer jag ut en sträng med 2 tecken med den först valda som startposition.

Screenshot - 2015-10-17 - 11:01:05

Det enkla uttrycket ger resultat enligt ovan. I många situationer så kanske detta räcker.

För att ta det ett steg till så blir det ännu så länge nödvändigt att dela upp koordinatnätet i flera lager.

Jag vill ha med fullständiga koordinater på några plaster. Det sätt jag vill göra detta på innebär även att jag vill vrida några koordinater till vänster och höger 90 grader, så dessa måste också filtreras ut. Det enkla sättet att få det snyggt är att skapa fyra olika lager med koordinater, men där endast ett av dessa ritar ut linjer etc.

  1. Linjer och alla XX siffror utom jämna 10-tal till vänster och höger.
  2. Jämna 10-tal till vänster och höger
  3. Fullständiga koordinater utom XX siffrorna till vänster.
  4. Fullständiga koordinater utom XX sifforrna i nederkant.

Jag bryr mig inte om att skapa fullständiga koordinater i överkant och till höger, men det är bara ett litet klick som avgör detta.

Screenshot - 2015-10-17 - 11:14:12

Det första steget är att ta bort jämna 10-tal från de vertikala axlarna. Det löser jag med uttrycket i bilden ovan.

CASE är ett vilkor som om det är uppfyllt verkställer ett uttryck. Här verkställer jag det tidigare använda uttrycket om för det första det är en koordinat på ‘x’ axeln, eller om det är en koordinat utan siffran ‘0’ på den fjärde positionen från höger.

Samma uttryck kan användas för de siffror som saknas (jämna 10-tal till vänster och höger) genom att göra några små förändringar.

Screenshot - 2015-10-17 - 11:21:18

Sedan är det bara att välja vilka av dessa som skall vridas med flervalsfälten:

Screenshot - 2015-10-17 - 11:25:24

För de kompletta koordinaterna så blir det lite krångligare då jag vill skriva ut text med mindre typsnitt på båda sidorna om koordinater med jämna 10-tal kilometer. Till att börja med så används samma urval som tidigare för att komma åt dessa, men sedan så blir det lite andra urval för att bygga upp den text som skall skrivas ut.

Screenshot - 2015-10-17 - 11:33:41

Det enda som skiljer detta uttryck mot det förra är fjärde raden. Här bygger jag upp etiketten genom att varva textstränga med mellanrum och text med värden från koordinaten. Eftersom jag här bara är ute efter Nord koordinaten så behöver jag inte räkna i uttrycket utan kan använda de två första siffrorna från vänster, sedan vet jag att det skall sluta på tre nollor så det behöver jag inte använda variabeln för.

Mellanrummen måste användas för att sifforna skall placeras på lämplig plats i förhållande till de tidigare utskrivna sifforna.

För de fullständiga Östliga koordinaterna så gör man motsvarande:

Screenshot - 2015-10-17 - 11:42:58

Nu är det bara att se till att rätt koordinater är tända och vridna åt rätt håll, har rätt typsnitt och finns på lagom avstånd från axlarna. Positionen kan även justeras med antalet mellanslag i uttrycken ovan.

Resultatet bör kunna bli något som liknar bilden nedan:

Screenshot - 2015-10-17 - 11:45:51

Jag har skapat några utskriftslayouter med lite blandade skalor och koordinatsystem som du kan hämta och använda.

https://github.com/klakar/geosupportsystem

De aktuella *.qpt filerna sparar du i .qgis2/project_templates/ så kan de användas genom att klicka på ”Lägg till element från mall”.

Screenshot - 2015-10-17 - 11:49:59

Jag har låst skalan för dessa kartobjekt, så om du vill ändra skalan så får du avaktivera den datadefinierade åsidosättningen. Observera även att dessa mallar endast fungerar fullt ut med QGIS Master eller 2.12.


Uttryck att kopiera och klistra in i QGIS.

1. Kilometersiffror utom jämna 10-tal till höger och vänster

CASE WHEN
 @grid_axis = 'x' OR (substr(@grid_number ,length( @grid_number ) - 3 ,1 ) != 0)
THEN
 substr(@grid_number ,length( @grid_number ) - 4 ,2 )
END

2. Kilometersiffror med jämna 10-tal till höger och vänster

CASE WHEN
 @grid_axis != 'x' AND (substr(@grid_number ,length( @grid_number ) - 3 ,1 ) = 0)
THEN
 substr(@grid_number ,length( @grid_number ) - 4 ,2 )
END

3. Fullständiga koordinater Nord (vänster)

CASE WHEN
 @grid_axis != 'x' AND (substr(@grid_number ,length( @grid_number ) - 3 ,1 ) = 0)
THEN
 ' ' || left( @grid_number ,2) || ' 000'
END

4. Fullständiga koordinater Öst (nere)

CASE WHEN
 @grid_axis = 'x' AND (substr(@grid_number ,length( @grid_number ) - 3 ,1 ) = 0)
THEN
 ' ' || left( @grid_number ,1) || ' 000'
END
Annonser

Taggar:

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: