Det går utmärkt att skapa pdf filer baserat på kartor i QGIS. De är även så kallade ”geospatial” pdf, vilket gör att de fungerar i exempelvis program som Avenza Maps. Om man har en karta med vektorlager, så kanske man vill ha dessa som lager även i pdf-filen.
QGIS skapar inte lager i de pdf-filer som exporteras. Det beror bland annat på alla de lageregenskaper som gör QGIS så fantastiskt att skapa snygga kartor och symboler med. Det är inte helt enkelt att föra över exempelvis transparenta stilar och färger till pdf-formatet.
QGIS löser detta genom att göra om vissa vektorlager till raster. En pdf från QGIS består därför inte av vektorlager, utan en renderad rasterbild med en angiven dpi-upplösning och de vektorer som kan visas som vektorer ovanpå detta, men inte som lager.
Vid export till pdf från kartbilden direkt, så får man valet att rasterisera bilden. Om man Har lager med transparens, genomskinliga färger, skuggor och andra lagereffekter, som man vill bevara, så kan rasterisering vara det enda alternativet. Man förlorar dock lite ”skärpa” i den genererade pdf-filen.
Om man skapar en layout så sköter QGIS vilka lager som skall rasteriseras och vilka som kan behållas som vektor.
I inställningarna kan man aktivt välja att rasterisera allt, eller enbart exportera vektor som just vektor. Om man väljer det senare så kommer lagereffekter och transparens inte att kunna visas korrekt.
Det blir dock inga lager i pdf-filen, vad man än gör…
Om man har en lite enklare layout, eller framför allt geodata som inte sträcker sig över en kant, så har man en skapligt enkel möjlighet att skapa lager i sin pdf.
Metoden för detta hittade jag i en YouTube film av Totó Fiandaca, på Italienska (länk), men det gick att förstå vad som gjordes utan ljud…
Börja med att exportera till SVG.
Till att börja med så får man en varning som har just att göra med problemet att vektordata inte klipps efter kartans utsträckning. Detta är ett problem med det underliggande biblioteket i Qt för att hantera just svg-formatet, och inte ett problem med QGIS i sig.
Sedan får man lite alternativ för exporten, exempelvis hur vektorlager skall exporteras. Här är det viktigt att även markera att exportera lager som SVG grupper. Vill du kunna klippa texter mitt i så skall även etiketter renderas med kantlinjer.
Jag kommer att exportera en omfattande vektorkarta för att tydligt belysa problemen, som man bör försöka undvika om man vill minska mängden arbete.
När man öppnar kartan i exempelvis InkScape så framträder lagergrupperna i lagerpanelen, men även överflödet av kartobjekten.
Om slutprodukten är SVG så kan man ganska enkelt fixa detta.
Börja med att ”släcka” alla lager som är korrekta, men håll koll på lagret med kartelementets ram.
Skapa sedan en ny lagergrupp, jag kallar min för ”klipp”.
Ramen runt kartan dupliceras (Ctrl + D) och kopian flyttas till den nya lagergruppen via högerklicksmenyn. Sedan släcks alla lager som inte skall ”klippas”. Se till att gruppen ”klipp” ligger överst i listan med synliga lager och markera allt. Om du kan så se till att bara välja linjer och ytor som faktiskt sträcker sig utanför gränsen. Detta gör processerna längre fram betydligt snabbare.
Det finns ett sätt att ”klippa” det som sticker ut inbyggt i InkScape, men man kommer inte hela vägen fram i mål. Via objekt-menyn väljer man då Beskär och Sätt, vilket klipper alla objekt i underliggande lager med formen i det översta klipp-lagret.
Nu ser kartan bra ut som SVG, men den beskärning som gjorts är inte permanent, så om vi går vidare i nästa steg (senare) så kommer de ”dolda” områdena att åter vara synliga. Men det finns en lösning…
Man kan göra allt manuellt, eftersom lösningen innebär att varje enskilt objekt klipps separat, men i mitt fall är det tusentals objekt som behöver klippas. Men i InkScape så finns det precis som i QGIS tillägg och ”plugin”.
Under inställningarna i InkScape så kan man hitta sökvägen till ”User Extensions”. Dit kopierar man lite filer från https://gitlab.com/su-v/inx-pathops (filerna i scr katalogen), och starta om InkScape.
I stället för att använda objektmenyn och ”sätta” en beskärning, så går man till tilläggsmenyn och väljer Tillägg, Generera från slinga, PathOps, 3 Intersection. Det finns andra tillägg som gör ungefär samma sak. Jag har lite bekymmer med linjeobjekt och det här tillägget, så prova gärna andra verktyg om du också har problem.
Sedan kan man gå och ta kaffe eller en rask promenad, lite beroende på hur många objekt som kartan består av. Verktyget klipper nämligen samtliga objekt ett i taget så snabbt det går, men med många objekt så kan det ändå ta lite tid. Och jag skojar inte när jag säger att detta tar tid! Det borde finnas utrymme för ganska rejäla prestandaförbättringar här.
När allt är klart så kan man åter ”tända” alla lagergrupper och spara filen som svg.
Tyvärr så klarar InkScape inte av att skapa lager-pdf (vad jag känner till). Men programmet Scribus kan det, och det kan även öppna svg-filer.
Vid öppnandet av svg-filen så hamnar allt på ett lager i dokumentet. Via lagerpanelen så skapar man de lager man vill ha i pdf-filen och ett lager åt gången så flyttar man vektorlagerna till dessa. Det går även att namnge lagerna på ett passande sätt. Man behöver inte begränsa sig till de lager som kommer från QGIS, utan det går exempelvis att lägga både allmäna vägar och övriga vägar i samma lager om man skulle vilja det.
När man sedan exporterar dokumentet från Scribus så skall man välja pdf-versionen 1.5. Annars så kan man inte spara i olika lager.
Den genererade pdf-filen kan sedan öppnas i pdf-läsare och där kan man välja att tända och släcka lager i dokumentet som man vill.
Eftersom detta är en process i flera steg och den inledande exporten från QGIS är svg, så blir inte den resulterande pdf-filen ”geospatial”.
Metoden är heller långt ifrån perfekt, då linjer som klipps görs om till polygoner (typ), vilket knyter ihop linjerna på ett tråkigt sätt.
Så länge man bara har polygoner eller lagren inte ritas ut utanför avsedda områden så kommer det dock att fungera bra.
För att få till geospatial pdf, med tänd- och släckbara lager, kanske även med inbakade attributtabeller, så behöver först och främst Qt biblioteken för SVG att förbättras. Sedan behövs det säkert en hel del arbete med QGIS för att implementera allt. Ett alternativ är om QGIS byter till någon annan funktion än Qt för att exportera pdf. Om du tycker att detta vore värdefullt för dig och din verksamhet så tycker jag att du skall ta kontakt med projektet och kontrollera vad ni kan bidra med för att finansiera dessa funktioner i QGIS. Annars får du stå ut med denna något omständliga och tidskrävande metod.