Jag har flera gånger tidigare visat exempel på hur det går att lägga till ett ”index” i en karta för att på så sätt kunna referera till ett område med en förenklad beskrivning. I detta inlägg så blir det en variant på detta när du redan har en karta som du dessutom vill lägga till ett index för.

Du kanske har en färdig layout, men dina användare saknar vana att ta ut koordinater och att det i dessa fall skulle underlätta med ett förenklat sätt att berätta för andra som har samma karta var olika saker är belägna.
Jag har skrivit en modell i QGIS som underlättar detta, och jag går igenom modellen lite längre ner i artikeln.

I modellen så är storleken på indexrutorna förinställda på 1000 meter, men det går att ändra. Det enda övriga som behöver göras är att definiera utsträckningen av indexrutorna. Detta kan göras genom att använda synlig del av kartfönstret, eller genom att rita en ruta på skärmen. Det går även att beräkna utsträckningen från ett inläst lager.

Resultatet är ett polygonlager med rutor som har ett textattribut med rutans indexnamn. Dessa kan stilsättas som man vill, men det går även att applicera en stil som standard för inlästa modeller i QGIS, så man slipper stilsätta indexrutorna varje gång.

Varje gång verktyget sedan körs så tillämpas den stil man pekat ut på resultatet. Väldigt smidigt.
Eftersom den här typen av index inte bygger på rutnät eller koordinatsystem i layout så fungerar det även som tjänst om man exempelvis publicerar kartan via QGIS Server, eller om man använder MerginMaps eller Qfield mobilt. I det här fallet så visar jag ett exempel med den kartlayout som användes inledningsvis.

Det kanske inte syns jättetydligt i bilden (klicka för att visa lite större), men modellen anpassar utsträckningen efter det koordinatsystem som projektet använder. Det är rekommenderat att använda exempelvis UTM, men valfritt projicerat system med meter som enhet skall fungera utmärkt. Även om jag inte provat det så skulle jag tro att även andra projektioner fungerar, men det ser jag inget direkt syfte med.
Den skarpsynte ser att indexrutorna sammanfaller med koordinatnätet och det är med avsikt. Modellen ”snappar” rutorna till närmsta koordinater som är jämnt delbara med rutornas storlek.
Modellen
Modellen kan se ganska enkel ut, men det ligger en hel del bakom som inte direkt syns när man öppnar den. Majoriteten av arbetet görs i en enda ruta, som är tydligt utmärkt i modellen.

Modellen börjar med två inmatningsfält. En ”extent” och ett ”heltal”. För att kunna ”snappa” till lite jämnare koordinater så måste utsträckningen först göras om till ett lager, och sedan konverteras tillbaka till extent, fast med justering till en jämn koordinatsiffra.

För justeringen så använder jag även här det värde som anges som storlek på indexrutorna. Att notera i bilden ovan är även ”Dependencies”. När jag byggde modellen så stötte jag på många obegripliga problem, men som efter ett tag kunde härledas till att processer försökte starta innan föregående steg var helt klart. Detta fungerar i många fall, men inte just här. Lösningen var därför att explicit ange vilka av steg som måste köras klart innan dessa efterföljande kan köras. Denna inställning används i många av de inkluderade stegen i modellen.
Huvuddelen av arbetet bakom indexrutorna handlar om etiketterna. Dessa genereras i steget med fältkalkylatorn.

Koden ovan använder en variabel ”col” för att lagra en array med tecken som sedan skall användas som indexnamn för kolumnerna. Detta betyder att det är enkelt att ändra vilka tecken som används, och även byta alfabet helt och hållet om man skulle vilja det.
Om man har fler kolumner än tecken i listan, så kommer dubbla tecken att användas, vilket sker i ”if” satsen. Sedan kombineras ett tecken från listan som motsvarar kolumnens ordningstal med ett ordningstal för raden. Ordningstal beräknas utifrån värden från tidigare modellsteg och därför så kan dessa heta något väldigt specifikt i koden ovan, jämfört med om du skapar modellen själv.
Vill du inte skapa modellen själv så kommer den att finnas på QGIS-hub för nedladdning.
Avslutningsvis i modellen så kastas de attribut som inte behövs, så att minimalt med data genereras.