Cloud Optimized GeoTIFF – för dig som tröttnat på tröga rasterdata
Har du någon gång laddat ner en rasterfil, börjat öppna den i QGIS, väntat i en kvart, tagit en fika, lusläst allt om pirayaätande amazondelfiner, varefter du sedan märkt att du äntligen laddat in hela rasterfilen i QGIS men att själva användningen är trög? Då är denna artikel för dig!
Vi börjar med själva namnet. Cloud Optimized GeoTIFF. Vi måste kanske börja i slutet. TIFF är ett filformat för bilder. Inget konstigt med det. Det står för Tagged Image File Format. När vi lägger till Geo så innebär det att TIFF-filen är georefererad, d.v.s. vi har även information om bildens position på jordytan. Eftersom TIFF är ett vanligt bildformat så har du kanske redan räknat ut att GeoTIFF alltså är rasterdata. Vi har alltså massor av pixlar som när man zoomar ut kanske ser ut som en satellitbild och när man zoomar in börjar likna en målning av Mondrian.
GeoTIFF är i praktiken alltså en vanlig TIFF-fil med lite extra rum för koordinatsystem, kartprojektioner och annat som vi geografer dagdrömmer om. GeoTIFF är en OGC-standard. Vilket är ett stort plus för dig som någon gång behöver hantera data i olika system (det är ungefär alla jag känner). Du kan även öppna en GeoTIFF i vilket program för bilder som helst, men det är i ett GIS-program (som QGIS) där du får in bilden på rätt plats “på kartan”.
Men vad är då CO-delen av COG? Cloud Optimized betyder alltså “optimerad för molnet”. Orsaken till att man vill ha en molnoptimerad GeoTIFF är för att rasterdata väldigt snabbt blir ganska tungt att använda. Om vi har en satellitbild så har vi massor av pixlar och i varje ruta finns information som ska lagras. Ju större yta vår satellitbild täcker och ju noggrannare data vi har, desto större blir även vår fil. Du kan försöka ladda in en stor fil som du laddat ner på din dator i QGIS men i något skede tar minnet slut och QGIS säger “nu räcker det med dina fånerier” och så kraschar programmet. Om du lyckas få in filen i QGIS kanske användningen är så trög att du hinner läsa hela Milleniumtrilogin innan du fått gjort din analys.
För att snabba upp processen kan vi göra om filen till en COG-fil. Det betyder att vi optimerar filen för att användas via nätet. Istället för att ha filen lokalt på din dator så finns den på valfri molntjänst (en HTTP filserver). Sedan tar vi kontakt med filen via t.ex. QGIS och får in samma vy men betydligt snabbare, eftersom vi inte begär hela filen på en gång, utan enbart den del som vi har synligt i QGIS-fönstret.
Hur öppnar jag en COG i QGIS?
Det är väldigt enkelt att öppna en COG i QGIS. Du behöver bara öppna dialogen för att hantera datakällor, välja Rasterfliken och klistra in länken till COG-filen.

I exemplet ovan används en fil som hittas på OpenAerialMap som heter Glacial flutes at Isfallsglaciären Sweden. Du kan kopiera länken genom att högerklicka på nedladdningsknappen och kopiera länken (istället för att spara filen lokalt). Klistra in länken i QGIS som i bilden ovan.

Nu kan du klicka på Lägg till och svara jakande på att använda en strömningsmetod. Efter några sekunder kan du använda filen direkt i QGIS, utan att du laddat ner något.

Hur gör jag min GeoTIFF till en COG?
För att göra en GeoTIFF till en COG så har du flera olika alternativ för att gå vidare. Du kan använda QGIS om du gillar att använda ett grafiskt användargränssnitt. Om du vill imponera på din omgivning så kan du använda GDAL via kommandotolken. Då tror alla i din omgivning att du hackat ryska inrikesministeriet, vilket ger street cred.
För att göra en egen COG-fil så behöver du en GeoTIFF-fil. Ifall du börjar med en enkel TIFF-fil så får du börja med att georeferera den men det får vi gå igenom någon annan gång.
Här följer instruktioner för att skapa en COG.
Skapa en COG-fil
För att skapa en COG-fil så behöver du en GeoTIFF samt programmet GDAL. Om du har installerat QGIS så finns faktiskt även GDAL installerat. Vi kan använda GDALs verktyg inne i QGIS grafiska verktyg, men i ärlighetens namn är det antagligen lättare att skapa en COG via kommandotolken. Om du använder operativsystemet Windows så finns det eventuellt ett program som heter OSGeo4W Shell som du kan öppna upp för att direkt börja skriva in GDAL-kommandon. Du kan också använda dig av Pythonkonsolen inuti QGIS. Öppna upp Pythonkonsolen och öppna en tom fil att klistra in följande kod i:
# Importera gdal
from osgeo import gdal
# Lägg in sökvägen till din okonverterade GeoTIFF-fil
input_path = r"C:\Users\Mumin\Desktop\min_fina_vanliga_geotiff_fil.tif"
# Lägg in sökvägen där du vill spara COG-filen och ge den ett namn
output_path = r"C:\Users\Mumin\Desktop\min_nya_cog_fil.tif"
# Utför konverteringen
gdal.Translate(
output_path,
input_path,
format="COG",
creationOptions=[
"COMPRESS=ZSTD"
"BLOCKSIZE=512",
"RESAMPLING=BILINEAR",
"BIGTIFF=IF_NEEDED",
],
)
print("Konvertering till COG är klar!")
Byt ut din input och output path till sökvägar på din egen dator. Sedan kan du köra koden genom att trycka på den gröna play-knappen ovanför din kod. Det tar en kort stund innan COG-filen är klar (har du en stor fil så tar det en lång stund). När filen är klar ser du ett meddelande i Pythonkonsolen till vänster. Ser du en massa felmeddelanden så misslyckades allting och du blev tvungen att ta kontakt med Gispo eller viga resten av din lediga tid på att hänga på obskyra forum för GIS-nördar.

Nu kanske du undrar vad det var för konstiga parametrar vi lade in i koden? Med creationOptions lade vi till parametrar för att optimera COG-filen. Beroende på ditt input data så skulle det stå lite olika grejer här. Här följer en kort beskrivning av de parametrar som används i exemplet ovan.
COMPRESS bestämmer vilken komprimeringsmetod som ska användas. Med ZSTD används en komprimeringsalgoritmen med namnet Zstandard (behöver inte läggas på minnet, det kommer inte på tentan). Den metoden är bra om man vill ha ett helt förlustfritt (lossless) resultat. Man kan ändå få ner filstorleken rejält, men det finns många faktorer som spelar in. Med Zstandard kan man minska filstorleken på en GeoTIFF med ca 30 % till 70 %. Med en annan komprimeringsmetod som heter WebP kan du få en ännu mindre filstorlek, men då sker det en förlust (lossy) på bildkvaliteten så något förvinner i samband med komprimeringen. Beroende på syftet med bilden så kanske det är helt okej, i andra fall är det inte.
BLOCKSIZE bestämmer hur stort rutnätet för bilden ska vara. På engelska snackar vi om “tiling”. I exemplet delas bilden internt in i block på 512×512 pixlar. Detta är viktigt när man vill göra filen optimerad för att användas från en HTTP Server, eftersom GIS-programmet då bara hämtar de block som syns på skärmen.
RESAMPLING bestämmer omsamplingsmetoden för hur man skapar översiktsbilderna. När du zoomar ut i ett GIS-program eller på en webbkarta visar filen inte alla otaliga originalpixlar, utan en mindre översiktsbild. Resampling bestämmer exakt hur originalpixlarna ska slås ihop till den mindre bilden. Metoden BILINEAR beräknar ett vägt medelvärde av de 2×2 närmaste pixlarna och passar bra för till exempel drönar-eller flygfoto.
BIGTIFF bestämmer om man tillåter en filstorlek över 4 GB, vilket annars är övre gränser för en GeoTIFF. Med IF_NEEDED så tillåts över 4 GB om det krävs.
Validering av en COG-fil
För att kolla om COG-filen skapades korrekt så kan man validera filen (det är god praxis!). Du kan fortsätta använda QGIS för det ändamålet. Klistra in följande kod i ett tomt dokument bredvid Pythonkonsolen. Ändra sökvägen till den COG-fil du vill validera.
from osgeo_utils.samples import validate_cloud_optimized_geotiff as v
v.main(['', r'C:\Users\snusmumriken\Desktop\min_nya_cog_fil.tif'])
Tryck på den gröna plusknappen för att köra koden. Kolla vad Pythonkonsolen returnerar.

Står det något i stil med:
C:\Users\sniff\Desktop\min_nya_cog_fil.tif is a valid cloud optimized GeoTIFF
Bra! Då har du lyckats skapa en duglig COG-fil! Du kan nu öppna den i QGIS och testa den. Ifall din ursprungliga GeoTIFF-fil saknade översiktsbilder och “tiling” så kommer den att vara snabbare nu som COG-fil även om den finns på din egen hårddisk. Men för det mesta är slutdestinationen för en COG-fil ett moln.
Ladda upp COG-filen till molnet
Nu återstår bara att ladda upp filen till en HTTP-kompatibel lagringstjänst. Vad som är lämpligast beror på er organisations molnmiljö: i Amazon Web Services (AWS) lägger man COG-filen i en S3-bucket, och i Microsoft Azure lägger man den i ett Blob Storage. Ifall ni har någon annan molnmiljö så är det någon form av objektlagringsgrej du bör leta efter. Ifall du vill ha molntjänster baserade i Norden kan vi nämna att båda svenska Elastx och finländska Upcloud har objektlagring som lämpar sig för COG-filer.. Vi kommer inte gå närmare än så in på hur man laddar upp filen, eftersom det finns väldigt många olika molnmiljöer du kan välja mellan. Men några grundgrejer behöver man alltid ha koll på för att få allt att funka.
Kom ihåg att objektlagringsbehållaren behöver ställas in med offentlig åtkomst och ha något som heter CORS aktiverat. CORS (Cross-Origin Resource Sharing) är en säkerhetsmekanism i webbläsare som styr om en webbplats får hämta resurser från en helt annan domän via JavaScript. När du har dessa konfigureringar gjorda kan du kopiera länken till COG-filen och klistra in den i QGIS så som vi gjorde tidigare.
Känns det för avancerat att börja pilla med Python för att få bukt med dina rasterdata? Då kan du alltid höra av dej till oss på Gispo så kan vi hjälpa till!
