Jag fick en fråga på YouTube om hur man sparar raster i GeoPackage, vilket fick mig att fundera. Eftersom jag inte testat tidigare så kan det vara fler som inte gjort det och då skulle det kunna vara ett lämpligt ämne att skriva lite om…
GeoPackage har stöd för rasterdata och vill man bli teknisk så finns det mer att läsa om detta på http://www.opengeospatial.org/standards/geopackage, men jag tänkte gå rakt på och helt enkelt prova lite…
Jag brukar spara vektor lager till GeoPackage genom att högerklicka på lagret och helt enkelt ”spara som…” GeoPackage! Det verkar dock inte fungera med raster. Jag får bara upp GeoTIFF som filformatsalternativ för min testfil (som är i GeoTIFF).
Vi menyn Raster så kan jag dock välja att ”Översätta format” (Translate).
Här kan jag inte bara välja GeoPackage bland en mängd rasterformat, utan även ställa in en hel del annat som kan vara bra när man skall spara om en rasterfil. Jag provade exempelvis att komprimera med JPG, vilket dock inte fungerade. GPKG drivern stödjer nämligen inte ”COMPRESS”, åtminstone inte ännu.
Översättningsdialogen skapar ett ”gdal_translate” kommando som går att skriva manuellt vid kommandoprompten om man inte vill använda QGIS. Även detta provade jag och det fungerar precis lika bra.
Det är lite intressant att kika på filstorlekar när man håller på med sådant här. Och det här fallet är inget undantag.
Jag är faktiskt lite skeptiskt när jag ser att gpkg-filen bara är 14 Mb medan tif-bilden är över 100 Mb…
Det blir ju inte mindre märkligt när jag gör om samma tif till jpg och den filen blir 50 Mb (75%) med väldigt tydliga artefakter när man zoomar in lite närmare (bild nedan).
Som jämförelse nedan en bild med GeoPackage.
Med GeoPackage filen är det inga artefakter? Jag provar även att döpa om filen, flytta den till andra sökvägar och plocka bort källdata, men det verkar faktiskt som att det är någon form av magi förknippad med raster i GeoPackage. Det tar lite längre tid att läsa in lagret än tif-bilden, som i det närmaste visas omedelbart, men jag kan inte se några förluster i bildinformationen.
Det går att bygga ”pyramider” i ett befintligt GeoPackage med ett kommando i terminalen/prompten, vilket påtagligt snabbar upp inläsningen av lagret. Beroende på hur många nivåer man genererar med kommandot så sväller filen en del. I mitt fall gick den från 14 Mb till 26 Mb, men det är ju fortfarande långt ifrån 109!
gdaladdo -r cubic filnamn.gpkg 2 4 8 16 32 64
Det går fint att spara ytterligare vektorlager i samma GeoPackage som ovan, men det blir lite krångligare om man vill skriva flera rasterlager till filen.
Man måste nämligen skicka med ett antal ”creation options” som inte finns med i verktyget i QGIS. Om man vill kan man manuellt lägga till dessa genom att redigera kommandosträngen innan man kör verktyget. Det som behöver läggas till är:
-co APPEND_SUBDATASET=YES -co RASTER_TABLE=nytt_lagernamn
Även om man bara använder ett rasterlager så skulle det vara ett utmärkt format att flytta stilsatta vektordata ovanpå en bakgrundskarta. Att sedan i kommande QGIS versioner baka samman denna enda datafil med projektfilen i ett QGZ-projekt blir väldigt effektivt. Komprimerade projektfiler i *.QGZ är ju en nyhet i QGIS 3 som jag skrev om för ett litet tag sedan.
Sammanfattning
Jag började kika på raster i GeoPackage med viss skepsis, och jag var ganska säker på att det inte skulle vara helt lätt att få till. Att jag hade helt fel kom som en glad överraskning.
Jag är däremot fortfarande lite misstänksam mot ett filformat som till synes komprimerar nästan 10 gånger utan synliga konsekvenser. Har jag gjort något galet eller missförstått något? Kan GeoPackage verkligen vara så här bra?
Vad får du för storlek om du zippar tiffen?
Filen från LM levereras som Zip men enbart TIF-filen blir heller inte så stor… 11.1 Mb. Liten aningen bättre i GeoPackage således, där dessutom med overhead i form av databas etc…
Komprimering av tiffar med diskreta data kan ibland bli löjligt små.