Tag Archive | SVG

ArcGIS/Adobe vs QGIS/Inkscape

Esri har släppt ArcGIS Maps for Adobe Creative Cloud, som gör det möjligt att något integrerat öppna och redigera vissa vektordata i ritverktyget, innan dessa exporteras eller publiceras. Därmed drar man nytta av Adobes grafikhantering, ett område där ArcGIS inte har direkt enorm funktionalitet.

I QGIS finns redan från början väldigt bra stilhantering, men då det nyligen släppts ett insticksprogram för Gimp i QGIS så tänkte jag titta lite på vilka ”grafiska” möjligheter som finns i QGIS kopplat till externa program. Läs mer…

Skapa egna symboler i InkScape

I detta inlägg så kommer jag att använda Open Source programmet InkScape för att skapa träd som jag sedan kan använda i QGIS för att skapa unika intryck i en stadskarta.

Med hjälp av datadefinierade inställningar så blir några få symboler visuellt unika. Vilket ger ett mindre stereotypt intryck i detaljerade kartor.

Metoden kan du sedan tillämpa på mängder av olika typer av objekt för att ge dem intryck av individualitet. Läs mer…

QGIS – Inkscape interaktion

Jag har ju tidigare i veckan halvt om halvt utlovat något om hur man kan jobba med QGIS och Incskape för att skapa snyggare kartor, så jag får väl göra ett försök med det.

Tyvärr så har det inte gått så bra, åtminstone inte så bra som jag trott och hoppats. Inte nog med att Print Composer i QGIS är något begränsad i hur man kan utforma kartor, den är dessutom ganska dålig på export av SVG-filer. Det blir konstiga fenomen och vektorlager begränsas inte av dataramar med mera. Det senare går att fixa i Inkscape, men det stör mig att behöva jobba i onödan.

Dessutom så är Inkscape ganska dåligt på att hantera vektordata med många brytpunkter. Skall man exportera vektordata så måste man mer eller mindre förenkla komplicerade geometrier ganska rejält för att det skall gå att jobba med SVG i Inkscape över huvud taget.

Suck! Problemet med export och print composer ligger egentligen inte i QGIS, utan i Qt4 som är dålig på att hantera SVG. Inkscape använder GTK, som kanske är bättre i detta fall, men som sagt har begränsningar i data med många brytpunkter.

Lösningen på många utskriftsproblem behöver således inte vara att förbättra QGIS, utan Qt. Jag vet nu inte när eller om man planerar att gå till Qt5 med QGIS, men det finns säkert skäl att så inte har skett. Qt finns ju numera i version 5.3 och QGIS kör 4.8.3.

Om detta skulle lösa några SVG-problem vet jag inte heller så under tiden så får man hitta andra lösningar.

QGIS rekommenderar PS-format om man vill exportera vektorbilder, men det får jag att fungera ännu sämre. Bäst fungerar egentligen att exportera endast själva kartan med koordinatnät  och en skalstock till TIFF i 600 dpi och sedan fixa layouten i LibreOffice Draw! Då kan allt annat fixas där och skalstocken används för att kontrollera att skalan blir korrekt.

Nåja, vi gör väl ett försök med Inkscape då.

Hela listan

Jag har en karta jag använt tidigare (ovan) som jag exporterar till svg. När jag öppnar i Inkscape så tar det lite tid men det blir snygga vektorer, men…

Screenshot from 2014-05-25 18:37:58

Som syns i bilden ovan så ”läcker” vektordata ut över kanterna, vilket innebär massor med onödigt arbete. Tittar man noga så ser man dessutom en mängd konstiga fenomen med svarta fält som man inte kan ha med i en färdig karta. Det verkar dock som att detta är ett problem på skärmen när data ritas ut, för om man zoomar in så ser det jättebra ut.

Nåja, processen är följande:

  1. Skapa ett nytt tomt dokument med rätt pappersformat.
  2. Importera (ctrl + i) den skapade svg-filen.
  3. Skala bilden till rätt storlek (shift + ctrl + m), bilden måste vara markerad när detta görs.
  4. Placera bilden korrekt på ”pappret”.
  5. Skapa en rektangel kring det som skall vara kvar (obs i samma lager som bilden, shift + ctrl + l för att visa lager)
  6. Med rektangeln överst i lagret markera allt (ctrl + a)
  7. Välj i menyn Objekt – Klipp – Sätt.

Om du var förutseende så skapade du även en kopia av rektangeln som inte var markerad med övriga, eller placerades i ett eget lager. Denna kan då användas som ram med exakt samma mått som det som klippts.

Tyvärr är det bara texter skapade i print composer som kan redigeras i Inkscape. Alla andra texter har konverterats till polygoner. Det går däremot utmärkt att skapa nya texter och grafik, men även att rätta till den där vägen som gick lite onödigt nära sjön för att det skall bli tydligt i den här skalan. Se till att kartbilden är avgrupperad så går det att redigera varje enskild nod i hela kartan (förutsatt att det är vektorer).

Screenshot from 2014-05-25 19:20:49

I bilden ovan är kartan klippt, men det enda i övrigt jag gjort är att jag har lagt till en ram runt kartan. Här kan du dock bli hur kreativ du vill och det kan vara vits att skapa en layout i förväg utan karta och ha några mallar liggande för att snabbt kunna importera svg-kartor.

Screenshot from 2014-05-25 19:25:59

Utskriften till PDF (bilden ovan) blev bra, utan svarta fält (puh!).

Utvärdering

Metoden är lite krånglig, men jag tror att om man skapar de vanligaste kartlayouterna i förväg i Inkscape, eller ett annat motsvarande ritprogram så har man väldigt mycket tid att vinna. Är man bara noga med skalan, och här är en exporterad skalstock från QGIS nyckeln, så blir arbetsflödet ganska hanterbart. Eftersom det är lite tungjobbat med många brytpunkter så skall man framför allt använda metoden med kartor med få brytpunkter sammanlagt.

Jag väntar fortfarande på den dag när det går att skapa lika mycket vektorgrafik direkt i QGIS, och inte minst att det blir en koordinatnätsfunktion värd namnet i print composer.

[För inlägget ovan har jag bland annat använt mig av den här dokumentationen]

Varför använda SVG?

Vad är SVG? ”Scalable Vector Graphics” är en XML definition och formatet går att redigera i vilken texteditor som helst. Det är dock lämpligast att använda ett ritprogram som Inkscape för att skapa symbolerna.

För några år sedan så var det lite si och så med stöd för SVG i olika program, speciellt webläsare, och då valde man hellre ett rasterformat som PNG för sin grafik. PNG fungerar fortfarande bra, och jag använder PNG lite då och då för att skapa symboler av mer ”bildlik” karaktär. Idag stödjer så gott som alla webläsare SVG och många av Open Source grafikprogrammen kan hantera formatet. Däremot så är det värre med stora och vanliga kommersiella program. Microsoft Office (Libre Office går bra) och ArcGIS (QGIS och GeoServer funkar fint) med flera har det sämre ställt med SVG stöd. För dessa så får man konvertera symbolerna till EMF i stället.

Varför skall man då använda SVG? Jo, det är för att det skapar enkelt skalbara symboler som blir snygga på skärm och i tryck. Rasterformat brukar kunna bli bra på skärm, men det är inte alltid det blir bra i tryck. Skalbart blir rasterformat bara om det är väldigt stora rasterbilder, men då får man i stället prestandaproblem när mycket data helt plötsligt skall hanteras.

Vad är lämpligt att avbilda med SVG? Enkel till medelavancerad grafik (inklusive allt som går att bygga i exempelvis ArcGIS symbolhantering) som går att bygga upp av kända symboldelar som punkter, linjer, cirklar, fyrkanter med mera. Går det att skapa symbolen i Power Point (LibreOffice Impress) så är den lämplig som SVG.

Det program som vanligen används för att skapa SVG filer är Inkscape. Det är inte jätte lätt att hantera för den som är ovan, så jag brukar rekommendera LibreOffice Impress i stället. Det är en OpenSource motsvarighet till Power Point och är lite enklare att skapa grafik i än Inkscape.

Börja med att skapa en rityta, detta blir grafikens gräns för ”formen”. Skall du skapa en rund symbol så skapa en kvadratisk rityta, skall du skapa en bred symbol så skapar du en bred rityta. Rita din symbol och exportera (inte ”spara”) till SVG. Nu går det att använda symbolen i både QGIS och GeoServer.

Något att tänka på. Även om det går att skapa symboler med linjer, så blir tjockleken inte så bra i mina försök. Linjer blir därför väldigt tunna oavsett vilken tjocklek som angivits i Impress. Lösningen är att använda flera polygoner på varandra med lite olika storlek och färg, för att på så sätt skapa en skalbar illusion av en kantlinje.

Tips! Om du har behov av mer avancerade symboler och kan rita den i ett vanligt ritprogram, ta en bild på den med en kamera eller redan har symbolen som rasterfil. Då kan symbolen ”kalkeras” av med Inkscape. Kanske lite redigeringar och sedan spara filen som SVG.

Exempel:

Denna PNG är i orginal 1,3 MB och 2700 x 2700 pixlar stor. Efter konvertering till SVG med 8 färglager så är filen 644 KB, och då har antalet brytpunkter inte reducerats i grafiken. Det går lätt att ta bort hälften av punkterna utan att utseendet påverkas nämnbart, men det tar lite tid att göra.

NinjaPNG-SVG

Till vänster är PNG bilden och till höger SVG (konverterat till raster). Med en stor bild så måste man zooma in mycket för att se egentliga skillnader, tänk dig då en PNG bild på några 100 pixlar.

För jämförelsens skull så minskade jag bilden till 220 x 220 pixlar och reducerade SVG grafikens punkter så att de båda filerna blev jämförbara i storlek, ca 120 KB.

NinjaSVG-PNG2

Nu blir skillnaderna tydligare. PNG filen fungerar fint om den bara skall visas i den tänkta upplösningen på en skärm, men om man vill skala upp symbolen eller ha hög kvalité i utskrifter så är SVG rätt väg att gå.

Slutligen har jag en SVG bild med PNG bilden inbakad! Nu kan du själv prova att öppna bilden i en webläsare i fullskärm eller använda ett annat program för att förstora och skriva ut bilden så mycket du vill för att jämföra.