Att ladda PostGIS med vektordata från Shape är busenkelt, inte minst direkt från QGIS.
Att göra samma sak med rasterdata är lite krångligare. Här kommer jag att fokusera på Linux (och Unix-liknande), så det kan se annorlunda ut om din PostGIS server körs på Windows.
Jag använder inte rasterdata i PostGIS normalt, men nu tänkte jag prova och se om det är något för mig framöver. En rejäl utvärdering hinner jag dock inte med i detta inlägg.
Det går inte att ladda raster direkt från QGIS, men som tur är så följer det med ett program när man installerar PostGIS som löser detta.
raster2pgsql
Det är ett ”terminalprogram”, vilket innebär att det inte finns något gränssnitt, utan programmet körs med ett kommando där det ingår alla parametrar som man vill tillämpa. Det är inte jättesvårt att skriva ett GUI för detta, men det hoppar jag över.
Grunden är att man kör programmet med ett antal alternativ mot en eller flera rasterbilder och pekar ut ett mål i en befintlig databas.
raster2pgsql alternativ rasterfil datatabell
Resultatet är kommandon i sql-format, som antingen kan skrivas till en fil, eller köras direkt med ett ”pipe” tecken.
Vi börjar med några ”alternativ”:
-c (Create new table)
-a (Append to existing)
-d (Drop table and create new). Denna brukar jag välja som standard.
-C (Constraints). Bra att lägga till för att kontrollera att raster registreras korrekt.
-s <SRID> (Tilldela rumslig referens). Om denna inte anges så läser programmet befintliga metadata för att fastställa SRID.
-t TILE_SIZE (dela upp raster i rutor för att snabba upp hanteringen) Välj inte för små rutor. Det går att använda ”auto” i stället för ett värde. Värdet som anges är exempelvis 512×512 för rutor med 512 pixlars sida.
-R Detta alternativ gör att rasterdata faktiskt inte lagras i databasen, utan bara metadata och en referens till var rasterfilerna finns. Raderas filerna, så slutar databasen fungera.
-M (Vacuum analyze) Städa upp i databasen (bra).
-I (indexera) Rekommenderas.
Som rasterfil kan alla typer av filer som GDAL kan läsa användas. Det går att använda ”wild cards” för att peka ut flera filer samtidigt (typ *.tif). Vill du veta vilka format som stöds så kan du skriva in kommandot:
raster2pgsql -G
Den tabell man skriver till kan skapas med kommandot -c eller -d ovan, men det måste finnas ett befintligt schema att skapa tabellen i. Tabellen anges på formatet: schema.tabell.
Det går att skriva till en fil med tillägget ” > fil.sql ” efter kommandot och sedan köra sql-komandot.
Alternativet är som sagt att ”pipa” resultatet till ett psql-kommando.
raster2pgsql raster tabell | psql -d databasnamn
Har man användarnamn och liknande i sin databas så räcker inte kommandot ovan. Då får man lägga till några alternativa växlar.
-U användarnamn
-d databasnamn
-h host (exempelvis localhost)
-p port (exempelvis 5432)
Jag har med lyckat resultat skrivit alla höjdraster från Lantmäteriets öppna data (nh 50 meter) till en tabell med nedanstående kommando.
raster2pgsql -d -C -s 3006 -I nh_*.tif hojddata.nh50 | psql -U klakar -d opendata -h localhost -p 5432
Du får dock anpassa kommandot till dina förutsättningar.
Att lägga till denna typ av lager i QGIS verkar vara lite annorlunda. Det är ju inte en rasterfil, men det verkar inte fungera som PostGIS data lager heller. Via DBmanager så går det dock att lägga till lagret… Jag kanske behöver starta om något?
Såhär initialt är nog ändå känslan att det går fortare att hantera virtuella raster baserat på geotiff, än inlästa i PostGIS databasen. Jag får prova lite mera och läsa på lite till.
UPPDATERING (2021)
Vill bara lägga till att för att använda raster i GeoPackage som källa för kommandot raster2pgsql så anger man ”GPKG:databasnamn.gpkg:tabellnamn”, glöm inte tabellnamnet…