Det var ett tag sedan jag skrev om etiketter för koordinater i layouter, i QGIS. Det har hänt en del i QGIS sedan dess, så det är hög tid att göra ett återbesök för att se på vilket sätt det blivit enklare och bättre.
En sak som jag fortfarande upplever som ett problem är att det inte finns några standardlayouter som följer med QGIS vid installation. Man möts alltid av ett tomt ”papper” när man skapar en layout och allt måste skapas från scratch. Många upplever säker inte detta som ett problem då väldigt mycket är helt digitalt idag, men produktion av layouter för utskrift eller inkludering i olika publikationer är fortfarande vanliga och jag tror inte att de kommer att försvinna inom överskådlig framtid.
Nåväl. Det kanske kommer en ”hub” även för layoutelement så småning om, där man kan publicera och hämta komponenter som kan vara lite mer komplexa att skapa själv.

Jag börjar med en enkel kartbild från Lantmäteriets öppna data (se tidiage inlägg) i en standardlayout. Storleken på layouten är inte viktig då jag vill kunna använda ”mallen” för flera olika layoutstorlekar.
Det första jag gör är att skapa en ram runt kartan. Detta gör jag för kartelementet och inte som en del i koordinatinställningarna. Jag minskar även ramens tjocklek, vilket kommer att vara återkommande när layouter skapas. Linjer och texter är som standard nästan alltid tjockare eller större än vad de behöver vara vid framför allt utskrifter.
Det första koordinatnät jag skapar är ett 1 km rutnät som blir startläge för testerna.

Även här minskar jag tjockleken på linjerna. Som ram väljer jag externa ”ticks” som också görs mindre och tunnare. Sedan börjar det som är mest intressant, nämligen etiketterna.

Genom att välje anpassade koordinater så kan man skapa ett uttryck för de etiketter som önskas. Till att börja med så skriver jag ett enkelt uttryck för att plocka fram kilometervärdet med två siffror. Nästa steg är att även få fram information om 100 km positionen. Detta gör jag normalt genom att lägga till information i etiketterna vid jämna 10-tal kilometer, och även det kan man göra med ett uttryck.

Ett villkor som testar om koordinaten är jämnt delbar med 10’000 gör det möjligt att lägga till siffror med högre värde före just dessa koordinatsiffror i etiketterna. Det är just funktionen left(…) i bilden ovan som skapa dessa extra siffror. Jag vill att dessa siffror ska skilja sig i stil mot övriga och ett sätt att göra detta är att använda HTML och CSS, vilket numera QGIS stödjer även i dessa sammanhang.

För att HTML ska fungera så måste man aktivera detta i typsnittsinställningarna för den etikett som det gäller. Det finns ingen ”heltäckande” inställning som gör att alla etiketter blir HTML aktiva, utan varje etikett måste ställas in separat.

Det finns en HTML-tag för ”superscript” som kan användas i sammanhanget. QGIS hanterar inte denna tagg helt enhetligt för närvarande. I förhandsgranskningen i uttrycksbyggaren visar önskat resultat, men i layouten så hamnar siffrorna inte på ”rätt” plats. Detta är antagligen en bugg, eller mer troligt en begränsning i QT-ramverket som QGIS använder. Ännu ett skäl att jobba på QGIS 4.0 och ett byte till modernare QT-ramverk. Det finns andra sätt att juster text med CSS, men ingen kod jag testat gör att siffror skrivs ut som superscript, så <sup></sup> får duga tills vidare.
Längre än såhär kommer jag inte utan att skapa fler koordinatnät…
Om jag exempelvis vill att koordinatsiffror längst ner till vänster (eller annat valfritt hörn) ska ha fullständiga koordinater. Så kallade ”corner labels”. Så behöver jag dels ta bort dessa i standardetiketterna och dels lägga till enbart dessa som en ny etikett. Detta är möjligt, men det är betydligt enklare att lägga till hörnetiketter i alla hörn samtidigt i ett enda rutnätslager.

Genom att använda funktioner för att hämta kartans utsträckning och vara lite kreativ med avrundningen av dessa så kan man få etiketter att skrivas ut (nästan) exakt i hörnen på kartan. Med de anpassade uttrycken ovan så är ”felet” mindre än 1 kartenhet, vilket jag kan stå ut med i de allra flesta fall.
Formateringen av koordinaterna kan man sedan anpassa bäst man vill på samma sätt som för övriga koordinatetiketter.

I det här fallet använder jag funktionen format_number(@grid_number) som anpassad etikett och skriver ut den med ett litet kursivt typsnitt. Genom att rotera etiketterna så blir det även tydligt vad de representerar och de är minimalt i vägen för de vanliga siffrorna.
Jag passar även på att lägga till en ”neatline” här, då hörnetiketterna antagligen kommer att sticka ut mest av alla. Denna yttre kantlinje är helt enkelt en ram för koordinatsiffrorna med en anpassad marginal.
Om man vill, så kan man nu även lägga till ett rutnät för oprojicerade koordinater.

Här finns också en del användbara nyheter i inställningarna. För det första så måste man fortfarande ange ett intervall mellan linjerna med decimaler, men då det går att göra beräkningar i fälten så kan man skriva in exempelvis 5/60 om man önskar ett intervall med 5 minuter.
Ramen för dessa anger jag till yttre ”ticks” och dessa gör jag ordentligt långa, så att etiketterna kan skrivas ut tydligt utanför de vanliga koordinaterna. Då dessa koordinater riskerar att skära ”fel” kant i layouten så begränsas vänster och höger till endast latituder, medan uppe och nere begränsas till endast longituder.
Dessutom så ställer jag in markeringslinjerna att luta ortogonalt, och att de endast ritas ut om de är minst 5 mm från hörnen.
Sedan är det bara att justera alla etiketter med stilar, avstånd och liknande så att det fungerar i så många olika utsträckningar som möjligt.
De inställningar som jag visat ovan är skapade för skala 1:50’000. De fungerar säkert i ett lite större område, men för större avvikelser så behöver man antagligen göra lite justeringar. Det kan man exempelvis göra genom att skapa uttryck för det intervall som används. Även detta fungerar bäst i ett avgränsat skalintervall.

Nästa möjlighet är att helt enkelt ”tända” och ”släcka” olika rutnät med ett uttryck baserat på aktuell kartas skala.
Önskemål i framtida QGIS versioner.
Jag har redan konstaterat att stödet för HTML/CSS behöver förbättras för koordinaternas etiketter. Men får man önska fritt så tänkte jag lyfta några saker till.
Det är fortfarande krångligt att särskilja koordinater som finns i över-/underkant och vänster-/högerkant. Det går att testa med en variabel om det är en koordinat på x- respektive y-axeln, men inte om den är i över- eller underkant.

Det går att styra visningen övergripande för etiketter, man jag skulle önska att det även gick att styra om etiketten är roterad eller ej med ett uttryck. Mina 10-tals km etiketter skulle då kunna roteras, medan de vanliga inte behöver göra det. Som det är nu så behöver jag skapa två nästan identiska rutnät för att uppnå samma effekt.
Som jag också varit inne på så skulle jag också önska att det vore enklare att hantera mallar för layoutelement, exempelvis genom att ytterligare en ”hub” på qgis.org för just denna typ av element kunde skapas.
Vad har du för önskemål om förbättringar kring koordinatsystem i layouter? Har du andra önskemål om förbättringar i layouter generellt? Använder du ens layouter i QGIS?
Om du vill testa min kartlayout så finns en ”template” via länken här: LÄNK.