Tidigare brukade jag använda ett plugin kallat QTiles (av NextGIS) för att generera de tiles man kan använda för exempelvis webbkartor med LeafletJS eller OpenLayers.
Detta plugin finns för QGIS 3 också, men är ”experimentellt”. I princip verkar det vara en portning av koden från 2.X, inte minst då ett av de i mitt tycke största problemen var att symboler och etiketter inte renderades över gränsen mellan olika tiles (se texter i bilden ovan).
Nu finns det ett processverktyg i QGIS 3 som också kan skapa tiles. Det installeras som ett plugin (Tiles XYZ av Lutra Consulting), och används sedan som alla andra processverktyg.
Det installeras även ett verktyg för att generera MBTiles om man är intresserad av det, men här testar jag XYZ tiles.
Resultatet av en enkel export ser du i bilden nedan (klicka för full upplösning).
Finemang! Inga klippta etiketter så långt jag kan se… Men vänta lite, det ser ju inte likadant ut som i QGIS (bilden nedan).
Symboler och texter är skalade annorlunda och det saknas en hel del etiketter jämfört med originalet…
Renderingen direkt från QGIS till bild är det däremot inget fel på (bild nedan).
Denna bild belyser även något som båda metoderna har problem med, nämligen resampling av raster i form av mitt höjdskuggningslager. I QGIS och i direktexporten så renderas detta som det ska, men i båda exporterna till tiles så försvinner resamplingen.
Så, för vektordata så är de nya processverktygen inte mycket mera användbara än det tidigare plugin-tillägget. För export av rasterdata så borde de båda däremot fungera ungefär lika bra.
Det finns ett sätt att lyckas med renderingen av tiles från vektordata. Gör först om det till rasterdata. Genom att välja ett hanterbart stort område, sätta en anpassad skala (jämförbart med önskad zoomnivå i webbkartan) och exportera med 96dpi. Den resulterande rasterbilden kan sedan användas när man kör vilket som av verktygen.
Detta är lite krångligt, svårt att räkna ut optimal skala, men det går. Men vad är det då som gör att framför allt stilar renderas så olika med processverktyget och i QGIS? En anledning är faktiskt projektionen! Jag använder SWEREF 99TM för mina vektordata och mitt projekt. Alla mått för symboler är angivna i kartenheten meter. När tiles exporteras så görs det till Pseudo Mercator och dessa enheter är inte i närheten av en meter… Detta förklarar symbolstorlekarna.
När jag byter mitt projekt till Pseudo Mercator så skalas alla mina symboler om och blir lika ”tunna” som de som exporterades tidigare. När jag byter projektion så slutar även raster resamplingen att fungera, precis som med exporten av tiles. Detta verkar således inte vara ett problem med verktyget utan ett problem med QGIS.
Det som jag inte kan förklara är däremot varför alla etiketter inte syns i exporten. De syns i QGIS även med Pseudo Mercator valt. Det verkar finnas en viss symmetri i resultatet för vilka etiketter som är borta. Dessa ligger någorlunda på rad såväl horisontellt som vertikalt, men det är för breda områden där etiketterna är borta för att det enkelt skall kunna förklaras med ”skarvarna” emellan rutorna.
Läser man ändringsloggen för koden till tillägget så finns där en nylig ändring som ”stänger av” klippta etiketter. Det är möjligen här något behöver göras för att dessa inte skall klippas alls, istället för att döljas om de klipps.
Avslutning
Hanteringen av etiketter är fortfarande problematisk när man skall generera tiles i QGIS. Då många av de andra problemen verkar bero på valet av projektion i ursprungsprojektet, så kan jag inte utesluta att det även gäller för etiketterna, men jag tvivlar på det. Det är inte riktigt användbart om de tiles som genereras ser annorlunda ut än i QGIS. Som det är nu kan man använda valfri metod för att generera tiles från raster, eller vektordata utan etiketter (stora punktsymboler kan även vara problem med i alla fall QTiles).
Processverktygen har något som däremot talar för dessa, och det är att det faktiskt går att använda dessa i exempelvis en modellbyggare. Om man vill så skulle man därför kunna anpassa verktyget och lägga till funktioner och steg före eller efter processen för att eventuellt fixa problem och brister.
Om någon kommer på varför texter inte renderas i processverktygen så gå till sidan för felrapportering av detta plugin och skapa en ”ticket”, eller ”pull request”.
[Tillägg]
Sedan ovanstående skrevs så har en ny version av verktyget släppts som avsevärt minskar marginalen runt skarvarna där etiketter plockas bort. Det återstår dock problem med etiketter som korsar tile-kanter och även punktsymboler som sträcker sig över kanterna klipps i renderingen.
Med version 0.8 av verktyget så är det som sagt bättre, men punktsymboler och etiketter klipps och utesluts fortfarande i viss mån.