Rasterdata är ofta det mest effektiva att använda i ett GIS, inte minst för att bibehålla en stil mellan olika system och i olika skalor. Det blir ofta snabbare att visa dessa då de redan är ”renderade” och bara skall presenteras. Nackdelen är att visningen är optimerad för vissa skalor och i mellanliggande nivåer så blir presentationen inte lika tydlig.
Rasterdata kan finnas i många olika format och ett format som är på stark frammarsch är COG, eller Cloud Optimized GeoTIFF. För att snabba upp visningen så använder rasterdata ”pyramider” eller ”overviews”. Dessa är för-renderade versioner av rasterlagren avsedda för visning i olika skalor. COG använder pyramider och bygger in dessa internt i filformatet. För en del andra format så kan de även vara separata filer och då heter de ofta samma sak som ursprungsfilen, fast med filändelsen *.rrd eller *.ovr.
En liten egenhet i GDAL möjliggör att overviews kan ha egna overviews i sin tur, och detta går att utnyttja för att skapa COG filer med overviews som inte alls är versioner av samma grunddata…
Det går med andra ord att ha grunddata i form av terrängkartan 1:50k och sedan renderade varianter av 1:100k och 1:250k som ”pyramider” inbakade i filen. När man därför zoomar ut från terrängkartan så kommer det inte en omskalad version av terrängkartan, utan den nya kartan i 1:100k och 1:250k.
Metoden för detta är beskriven i https://xycarto.com/2022/11/26/qgis-to-stylized-cogs/ och det är därifrån jag hämtar beskrivningen här.
För att testa så begränsar jag mig till ett mindre område och här skapar jag ett QGIS projekt med data i 1:50k, 1:100k och 1:250k.
Inledningsvis skapar jag en polygon som täcker det område som skall exporteras. Det kan vara smart att välja utsträckning med omsorg om man ser framför sig att man vill lägga till fler angränsande lager, men för testerna här så skapar jag ett godtyckligt lager.
Ställ in skala 1:50k i QGIS och välj sedan Export Map to Image där utsträckningen anges till polygonen från tidigare och spara som 50k.tif.
Ställ sedan in 1:100k med 100k kartan och gör samma sak, med en fil kallad 100k.tif. Slutligen gör detta även för 1:250k.
Nästa steg blir att göra om 100k.tif till 50k.tif.ovr eller med andra ord pyramidfil för 50k.tif. Det som sedan är lite speciellt med GDAL är att även en ovr-fil kan ha pyramider, så 250k.tif skall göras om till 50k.tif.ovr.ovr.
gdal_translate 100k.tif 50k.tif.ovr –of ”GTiff” –r bilinear –co PROFILE=BASELINE –co BIGTIFF=YES –co TILED=YES
Kommandot ovan sköter konverteringen och ett motsvarande kommando används för att skapa 50k.tif.ovr.ovr av 250k.tif.
Det går nu att använda 50k.tif direkt i QGIS och se att växlingen mellan olika kartor fungerar, och om man använder gdalinfo på filen så ser man att den hänvisar till pyramider.
Driver: GTiff/GeoTIFF Files: 50k.tif 50k.tif.ovr 50k.tif.ovr.ovr
Nästa steg blir att kombinera ihop alla filerna till en enda COG.
gdal_translate 50k.tif karta-cog.tif -of COG -co COMPRESS=JPEG
Jag lyckades inte få ovanstående kommando att fungera, men när jag tog bort ”-co COMPRESS=JPEG” så fungerade det, men då komprimeras inte pyramiderna, vilket faktiskt kan vara ok. Den nya filen (karta-cog.tif) kan nu användas i olika sammanhang och den kommer att byta utseende beroende på hur kartan skalas.
Det är lite överraskande att det här faktiskt fungerade, men det öppnar för mycket kompakta bakgrundskartor i många sammanhang. Pyramider byggs enligt en viss struktur, så att en förutsättning är att man har kartor i skalor som passar detta, men i det här fallet så fungerar det faktiskt ganska bra utan att jag granskat resultatet allt för noga. Jag har heller inte testat i ArcGIS men jag ser inte att filen inte skulle fungera där.
Beroende på hur mycket ram du har och datorns prestanda generellt, så kan du skapa ganska stora COG med anpassade kartor över intressanta områden. Mina 50, 100 och 250 tiff filer är 396, 283 och 70 MB stora, och den resulterande COG filen är 1.1 GB. Om jag comprimerar med -co COMPRESS=DEFLATE (vilket fungerar) så blir filen 590 MB.