Caricamento di un raster in un database PostGIS 2.0 su Windows


18

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.exeprogramma 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 cmdnella barra di ricerca e premere ctrl+ shift+ enter) per abilitare il raster2pgsql.exefunzionamento, sono riuscito a caricare un raster nel mio database. Ho un file raster chiamato ras_test.tifche ho temporaneamente inserito nella bincartella della mia postgresqlinstallazione. 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ì:

inserisci qui la descrizione dell'immagine

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
  1. Devo fornire un SRID? -s 4236

  2. Gli argomenti sono -I -C -Mtutti opzionali?

  3. -tsembra essere la dimensione della piastrella; Devo specificare questo se non ho uno schema personalizzato?

  4. 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 ride rast. ridha quattro valori, nad rastnon 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:

inserisci qui la descrizione dell'immagine

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.


raster2pgsql si riferisce al riferimento postgis.org/documentation/manual-svn/…
Mapperz

Ho provato a caricare file raster (jpg) in post gis usando la sintassi fornita qui "C: \ Programmi (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 "Ho potuto vedere una tabella raster creata nel database. Era proprio come mostrato da Celenius in cui non vedi nulla sotto la colonna "raster raster" se non fai clic su una cella specifica. Ecco il mio vero problema. Come visualizzare il livello raster da ArcGIS usando il livello di query sql. Quando ho provato ad aggiungere questo livello e convalidarlo, si dice "RAST raster
GISTECH

Penso che dovresti porlo come una nuova domanda man mano che otterrai più risposte. Non so come collegarti usando ArcGIS ma puoi usare QGIS per accedervi.
djq,

1
Nota: pgAdminIII mostra una cella vuota per i dati oltre una determinata dimensione; vedi biglietto n. 297
Mike T

la query precedente funziona, ma qualcuno può dirmi come memorizzare i valori dei pixel / valori delle celle nella tabella?

Risposte:


5

SRID? -s 4236 (richiesto)

Gli argomenti -I -C -M sono tutti opzionali?

-C Applica vincoli raster - srid, pixel size ecc. Per assicurarsi che il raster sia correttamente registrato nella vista raster_columns. (necessario)

-M (Vacuum analizza la tabella raster.) Opzionale

-I (Crea un indice GiST sulla colonna raster.) Opzionale ma consigliato

-t TILE_SIZE (Taglia il raster in tessere da inserire una per riga della tabella. TILE_SIZE è espresso come WIDTHxHEIGHT.)

myschema.demelevation lasciare fuori (sì)

http://postgis.net/docs/using_raster_dataman.html#RT_Loading_Rasters


Grazie a Mapperz, ho capito parzialmente come funziona raster2pgsql - tuttavia il mio raster in postgresql contiene solo una cella, motivo per cui sto cercando di capire quali argomenti usare.
djq

9

Celenius,

Se non si utilizza l' -topzione con dimensioni dimensioni, il file raster verrà visualizzato come un singolo record. Ho appena notato un errore nei documenti che è probabilmente ciò che ti confonde. Lo aggiusterò. La -tdeve sempre essere seguita da un larghezzaxaltezza.

Se vuoi che sia suddiviso in blocchi di 100x100 pixel di altezza - come dice Mapperz - usa l'opzione -t.

Quindi il tuo comando sarebbe:

raster2pgsql -s 102003  -t 100x100 ras_test.tif ras_test > elev.sql

Dai un'occhiata all'esempio aereo nei documenti. http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader

Qual è quello che molti esempi manuali usano:

raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 bostonaerials2008/*.jpg aerials.boston | psql -U postgres -d gisdb -h localhost -p 5432

So che gli switch possono essere un po 'scoraggianti perché sono tanti e la maggior parte sono opzionali. Forse in 2.1 avremo una gui simile alla shp2pgsql-guiper rendere questo un po 'più semplice per i neofiti.

Nell'ultimo versetto raster2pgsqlc'è la logica per inferire lo srid dalle informazioni di georeferenza nel tif o in altri file raster (questa versione è ora disponibile come binario di finestra). Non ho ancora provato quella funzione, ma se funziona puoi anche lasciare fuori lo srid e indovinerà (si spera correttamente).


Grazie per i suggerimenti! Non riesco ancora a farlo funzionare, ma sto iniziando a capire un po 'meglio gli switch.
djq

Ha funzionato, ma non ho capito come dovrebbe apparire all'interno del database. Grazie ancora per il vostro aiuto.
djq

È finalmente arrivata la GUI per il caricamento dei raster in pgsql? :)
astrojuanlu,

-2

Nella vista SQL, non è possibile visualizzare i dati quando sono di grandi dimensioni. È possibile eseguire la query in un file e mostrerà i dati.


1
La domanda (vecchia) originale ha già una risposta accettata e la tua non è in realtà una soluzione alternativa alla domanda, ma piuttosto una richiesta di ispezione visiva.
Chiurlo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.