Estoy tratando de descubrir cómo cargar un ráster en una base de datos PostGIS2.0 (he hecho preguntas anteriores sobre este tema aquí y aquí ). Estoy tratando de usar el raster2pgsql.exe
programa provisto con PostGIS2.0.
Después de darse cuenta de que el símbolo del sistema en Windows debe ejecutarse como administrador (en Windows 7 para ejecutar la línea de comando como administrador, escriba cmd
en la barra de búsqueda y presione ctrl
+ shift
+ enter
) para habilitar la raster2pgsql.exe
función que he logrado cargar un ráster en mi base de datos. Tengo un archivo raster llamado ras_test.tif
que coloqué temporalmente en la bin
carpeta de mi postgresql
instalación. Usando el siguiente código, convierto y cargo este ráster:
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
Cuando veo esta tabla en PostGIS se ve así:
Sin embargo, no he podido ver esto en QGIS, y no estoy seguro de haberlo cargado correctamente, ya que parece que no hay datos en este archivo. Parece que he cargado el nombre de archivo como un ráster, en lugar del contenido de datos. ¿He cometido algún error obvio que me impide cargar un ráster en mi base de datos?
La documentación de PostGIS proporciona un ejemplo de cómo cargar un ráster, pero no entiendo qué argumentos son opcionales, y todavía no tengo claro qué debo usar si quiero usar el esquema predeterminado. Por ejemplo, en el siguiente ejemplo de la documentación:
raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql
psql -d gisdb -f elev.sql
¿Tengo que proporcionar un SRID?
-s 4236
¿Son
-I -C -M
todos los argumentos opcionales?-t
parece ser el tamaño del azulejo; ¿Debo especificar esto si no tengo un esquema personalizado?- ¿Puedo dejar de lado
myschema.demelevation
?
EDITAR: He incluido el resultado de las sugerencias a continuación:
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
Esto da como resultado una tabla con dos columnas rid
y rast
. rid
tiene cuatro valores, nad rast
no tiene ninguno. Cuando trato de usar algunos argumentos más:
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)
Me sale el siguiente resultado. Esto da como resultado una nueva tabla con la siguiente estructura:
Supongo que este no es un ráster cargado correctamente ya que no puedo ver los datos. ¿Hay alguna otra opción que pueda probar?
EDITAR: Este último intento funcionó, simplemente no estaba accediendo al ráster correctamente.