Sto cercando di capire come caricare un raster in un database PostGIS2.0 (ho fatto domande precedenti su questo argomento qui e qui ). Sto cercando di utilizzare il raster2pgsql.exe
programma fornito con PostGIS2.0.
Dopo aver capito che il prompt dei comandi in Windows deve essere eseguito come amministratore (in Windows 7 per eseguire la riga di comando come amministratore, digitare cmd
nella barra di ricerca e premere ctrl
+ shift
+ enter
) per abilitare il raster2pgsql.exe
funzionamento, sono riuscito a caricare un raster nel mio database. Ho un file raster chiamato ras_test.tif
che ho temporaneamente inserito nella bin
cartella della mia postgresql
installazione. Utilizzando il seguente codice, converto e carico questo raster:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 ras_test.tif -t> elev.sql
Processing 1/1: ras_test.tif
C:\Program Files (x86)\PostgreSQL\9.1\bin>psql.exe -p 5434 -U postgres -d test2 -f elev.sql
BEGIN
psql:elev.sql:2: NOTICE: CREATE TABLE will create implicit sequence "-t_rid_seq" for serial column "-t.rid"
psql:elev.sql:2: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "-t_pkey" for table "-t"
CREATE TABLE
INSERT 0 1
COMMIT
Quando visualizzo questa tabella in PostGIS appare così:
Tuttavia, non sono stato in grado di visualizzarlo in QGIS e non sono sicuro di averlo caricato correttamente poiché sembra che non ci siano dati in questo file. Sembra che abbia caricato il nome del file come raster, piuttosto che il contenuto dei dati. Ho commesso degli errori evidenti che mi impediscono di caricare un raster nel mio database?
La documentazione di PostGIS fornisce un esempio di come caricare un raster, ma non capisco quali argomenti sono facoltativi e non sono ancora chiaro su cosa dovrei usare se voglio usare lo schema predefinito. Ad esempio, nel seguente esempio dalla documentazione:
raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql
psql -d gisdb -f elev.sql
Devo fornire un SRID?
-s 4236
Gli argomenti sono
-I -C -M
tutti opzionali?-t
sembra essere la dimensione della piastrella; Devo specificare questo se non ho uno schema personalizzato?- Posso semplicemente lasciarlo fuori
myschema.demelevation
?
EDIT: ho incluso il risultato dei suggerimenti di seguito:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 -t 300x300 ras_test.tif ras_test | psql.exe -U postgres
-d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
BEGIN
NOTICE: CREATE TABLE will create implicit sequence "ras_test_rid_seq" for serial column "ras_test.rid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ras_test_pkey" for table "ras_test"
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
COMMIT
Ciò si traduce in una tabella con due colonne rid
e rast
. rid
ha quattro valori, nad rast
non ha nessuno. Quando provo ad usare altri argomenti:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -I -C -e -Y -F -s 102003 -t 300x300 ras_test.tif ras_test1 | psql
.exe -U postgres -d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
NOTICE: CREATE TABLE will create implicit sequence "ras_test1_rid_seq" for serial column "ras_test1.rid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ras_test1_pkey" for table "ras_test1"
CREATE TABLE
CREATE INDEX
ANALYZE
NOTICE: Adding SRID constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding scale-X constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding scale-Y constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding blocksize-X constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding blocksize-Y constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding alignment constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding number of bands constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding pixel type constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding nodata value constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Unable to add constraint "enforce_nodata_values_rast"
CONTEXT: PL/pgSQL function "_add_raster_constraint_nodata_values" line 40 at RETURN
PL/pgSQL function "addrasterconstraints" line 94 at assignment
PL/pgSQL function "addrasterconstraints" line 49 at RETURN
WARNING: Unable to add constraint: 'nodata_values'. Skipping
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding maximum extent constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
addrasterconstraints
----------------------
t
(1 row)
Ottengo il seguente output. Ciò si traduce in una nuova tabella con la seguente struttura:
Presumo che questo non sia un raster caricato correttamente in quanto non riesco a visualizzare i dati. Ci sono altre opzioni che posso provare?
EDIT: Quest'ultimo tentativo ha funzionato, semplicemente non stavo accedendo correttamente al raster.