Det fanns en andra fråga i det mail som jag refererade till i gårdagens inlägg. Det handlar om att hämta skalan från en karta och använda denna i etiketter på layouten.
Det går ju att använda en numerisk skala som objekt (”Lägg till skala” med stilen ”Numerisk”), men det går faktiskt att göra betydligt mer med hjälp av funktioner och Pythonskript.
Det som är önskvärt är att hämta aktuell skala för en kartram i layouten och sedan använda den i ett uttryck så att man exempelvis kan skriva.
Skala: 1:5000
Till att börja med så krävs det en anpassad pythonfunktion då det inte finns någon variabel som kan hämta skalan från godtycklig kartram.
from qgis.core import * from qgis.gui import * @qgsfunction(args='auto', group='Custom') def skala(kart_id, feature, parent): layouts = iface.activeComposers() for layout_vy in layouts: layout_ruta = layout_vy.composerWindow() layout_nu = layout_vy.composition() karta = layout_nu.getComposerMapById(kart_id) if karta: skala = int(karta.scale()) return skala
Funktionen skala() tar ett numeriskt argument som motsvarar önskad kartrams index. Har man bara en karta i layouten så kan man anropa skala(0).
Skriptet skrivs in i en ”Ny fil” (se bild nedan) som man kan döpa till vad man vill. Och när koden är inskriven så klickar man på ”Läs in” för att funktionen skall bli tillgänglig i Uttrycksbyggaren.
Svaret på funktionsanropet är heltalsdelen av kartramens skala. Om jag därför har satt den första kartramens skala till 1:5000 och använder uttrycket nedan.
Skala 1:[% skala(0) %]
Så blir resultatet just:
Skala 1:5000
Vill jag ha skalan i den andra kartramen så anropar jag i stället skala(1).
Det kan finnas tillfällen när heltalsdelen av skalan inte avrundas på samma sätt i variabeln som i egenskaperna för kartan, men det kan man nog fixa med en smartare bearbetning av resultatet i pythonfunktionen.
Det kan även behövas lite ”snyggifiering” av heltalet, men det får ni fixa själva.