SVG är Scalable Vector Graphics, vilket är vektorbaserad grafik som kan anpassas för olika skalor/storlekar helt förlustfritt. QGIS kan precis som flera andra program använda SVG formatet för att inkludera bilder, men även som markörer för exempelvis punktobjekt.
I QGIS kan man i princip använda vilken SVG som helst, men om man vill skapa anpassade SVG för QGIS, så behöver dessa SVG-filer modifieras något. Dessutom kan det vara bra att redan när man skapar vektorfilen tänka efter vilka egenskaper man vill att symbolen skall ha i QGIS.
SVG är ett både enkelt och komplext format. I grunden är det väldigt enkelt med precis bara det som behövs för att rita ut exempelvis en cirkel på skärmen. Men i formatet finns det möjligheter att lagra ytterligare information om bland annat programmet som skapat filen, eller om den som skapat filen. QGIS bryr sig inte om denna överflödiga information och letar i stället efter just det som behövs för att rita ut grafiken i filen.
SVG har en ”style” komponent som är väldigt lik CSS. Denna används även i QGIS för att exempelvis bestämma fyllning och linjestil.
Låt oss ta ett exempel.
I Inkscape skapar jag en enkel symbol med en kub. Den sparas som SVG och kan direkt användas i QGIS, men också redigeras i en texteditor.
I QGIS så visas symbolen precis som den skapats i Inkscape och det enda vi kan påverka är storlek, position och rotation. I SVG filen syns även ”style” parametrarna inne i taggar vid namn ”path” eller ”rect”.
Varje objekt i SVG-filen har en ”form” tagg som path, rect, circle eller motsvarande. Varje form har sedan också en ”style” definition. För att inte SVG filerna skall bli en begränsning i QGIS så bör man minimera komplexiteten i såväl formerna, som antalet objekt. Dessutom så kan man i Inkscape välja att spara som ”vanlig SVG” i stället för Inkscape SVG. Detta reducerar antalet ”taggar” i filen utan att former och objekt påverkas. Det som tas bort är sådant som Inkscape använder för att hantera filen i programmet, och detta behövs inte i andra program.
I QGIS så finns det fält för att justera fyllningsfärg, linjefärg och linjestil. Med en omodifierad SVG så är dessa inte aktiva.
För att göra dessa ”aktiva” så behöver SVG-filen modifieras.
Detta är inte alls speciellt svårt, åtminstone inte för lite enklare symboler som det här fallet. För att göra det ännu enklare så kan man använda ”objektegenskaperna” i Inkscape.
Markera bara det objekt du vill återfinna i filen och visa objektegenskaperna (högerklicka eller Shift-Ctrl-O). Redigera sedan ID och Label fälten, eller notera ner de värden som programmet själv skapat. För att det du skriver in skall ”fastna” så skall du bekräfta redigeringen med ”Enter” i varje fält, annars återgår värdet när du lämnar inställningarna.
I texteditorn så är det sedan bara att leta reda på dessa texter.
”Formen” inleds med <path och avslutas med />.
För att göra det möjligt för QGIS att bestämma färger i symbolen så lägger man till ”parametrar” för dessa i filen. Detta är en standard i SVG som även används i QGIS för att ”skicka med” inställningar till filen. SVG har godtyckligt stöd för dessa parametrar, men det som stöds (för närvarande) i QGIS är:
- Fyllning (färg)
- Opacitet (fyllning)
- Kantlinje (färg)
- Kantlinjebredd
- Kantlinjeopacitet
Dessa beskrivs med ”parametrarna”:
- fill=”param(fill)”
- opacity=”param(fill-opacity)”
- stroke=”param(outline)”
- stroke-width=”param(outline-width)”
- stroke-opacity=”param(outline-opacity)”
För varje objekt i SVG-filen kan man använda en eller flera av dessa parametrar för att åsidosätta grundstilen med en inställning som styrs av QGIS.
När man lagt till parametrarna så är det inte säkert att symbolen ser ut som den gjorde i Inkscape, men nu är det möjligt att justera fyllningsfärg, linjefärg och linjebredd. I bilden ovan har jag avsiktligt valt en avvikande färg för att belysa ett ”problem” med komplicerade objekt. Nämligen att QGIS bara kan hantera en fyllningsfärg och en linjefärg. Det är därför man redan när man designar symbolerna bör ha detta i åtanke.
Tillbaka till Inkscape.
I Inkscape så ändrar jag symbolen så att jag har en sammanhängande form för hela symbolen i en grundfärg. Det är denna som jag döper till ”kub” i objektegenskaperna, och denna som jag vill kunna påverka avseende fyllningsfärg och kantlinje. De lite ljusare och mörkare fälten är separata objekt med ”vit” eller ”svart” färg och ganska mycket opacitet i färgerna.
Sedan sparas filen om och redigeras som tidigare med önskade parametrar.
Nu går det att styra fyllningsfärgen och få de transparenta fälten att anpassa sig till fyllningsfärgen. Sätta kantlinjen med färg och tjocklek. Observera att SVG även har en utsträckning definierad. Om man har en kantlinje som hamnar utanför detta område när man ökar dess tjocklek så kommer den att klippas och inte visas. En väg runt detta är att lägga till en mycket liten rotation i symbolen. Då ritas hela kantlinjen ut. Om detta är en ”bugg” eller inte vet jag inte, men det är lätt att komma runt problemet på det här sättet.
Vill man skapa en symbol med mer än en fyllningsfärg, så går det om man funderar till lite.
Här skapar jag en symbol med tre överlappande cirklar. Den består av ett grundlager som är alla cirklar sammanslagna, som jag vill kunna styra med fyllningsfärgen. En polygon som är de synliga delarna av de två nedre cirklarna. Denna vill jag kunna styra med linjefärgen i QGIS. Dessutom har jag ett lager som jag låter vara vitt med 50% opacitet som kommer att ge intryck av linjefärg i ljus ton. Kantlinjen runt alla cirklar sätter jag till svart i Inkscape, men jag vill att tjockleken skall gå att ändra i QGIS.
Sedan är det bara att redigera SVG filen och lägga till parametrar på ”rätt” ställe.
Bakgrunden får fill, fill-opacity och outline-width, precis som man skulle kunna förvänta. Men inte någon parameter för kantlinjefärg, denna sätts i stället fast till svart.
Vill man skicka med ett standardvärde med parametrar så kan man göra det. Det går exempelvis att sätta en standradfärg för fyllning om inget aktivt val gjorts i QGIS med ”fill=”param(fill) #FF0000” vilket ger en röd fyllning som standard.
De nedre cirklarna skall också få parametrar för fyllning och opacitet, men dessa tilldelas parametrarna för outline och outline-opacity. Detta gör att färginställningen för kantlinjen i QGIS kommer att styra detta områdets färg i stället för kantlinjen.
Nu kan jag styra två fyllningsfärger och kantlinjens tjocklek. I det här fallet har jag skapat ännu en cirkel överst som har fyllningsfärgen som parameter, för att täcka över kantlinjen om den används, om jag drar på lite opacitet så förstår ni varför.
Här får man helt enkelt laborera lite och dessutom fundera på hur man vill kunna styra och kontrollera symbolerna inifrån QGIS.
Skapa sedan din standardsymbol i stilhanteraren. Då blir den enklare att hantera senare och om du skapar den genom att ”bädda in” SVG filen så är det väldigt lätt att skicka med stilen i projekt och kartor, men även i stilexporter som standard stil-xml.
Gör du symboler som fungerar bra så kan du alltid dela med dig av dem till andra. Det är riktigt enkelt att göra det. Klicka bara på ”Import/Export” i stilhanteraren och välj exportera.
Markera en eller flera symboler och exportera dessa till en fil med valfritt namn.
Import görs på motsvarande sätt men man väljer ”import” och pekar ut filen med symboler man vill importera. Detta öppnar tillgängliga symboler och det går att välja vilka man vill importera om där finns flera.
Det går även att peka på en ”url” sökväg för att hämta stilarna, om stilfilen exempelvis ligger på GitHub.
Gå exempelvis till https://github.com/klakar/QGIS_resources/tree/master/collections/Geosupportsystem/symbol och klicka på en xml-fil för önskad stil.
Högerklicka på knappen ”Raw” och välj att kopiera länkadressen. Denna kan du sedan klistra in i stilhanterarens importdialog.
Vilken sidstorlek använder du i Inkscape?
Det varierar. Är det vektor grafik så spelar det mindre roll. Anpassa sidan till grafiken och välj en storlek som ligger nära den önskade slutstorleken.