Estoy tratando de averiguar cómo cargar una trama en una base de datos PostGIS2.0 (he hecho preguntas anteriores sobre este tema aquí y aquí ). Estoy intentando utilizar el raster2pgsql.exe
suministrado con PostGIS2.0.
Después de averiguar que el símbolo del sistema en Windows debe ejecutarse como administrador (En Windows 7 para ejecutar la línea de comandos como administrador, escriba cmd
en la barra de búsqueda y pulsa ctrl
+ shift
+ enter
) para activar raster2pgsql.exe
para funcionar he conseguido más o menos cargar una trama en mi base de datos. Tengo un archivo raster llamado ras_test.tif
que coloqué temporalmente en el bin
carpeta de mi postgresql
instalación. Usando el siguiente código convierto y cargo este 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
Cuando veo esta tabla en PostGIS tiene este aspecto:
Sin embargo, no he podido ver esto en QGIS, y no estoy seguro de si lo he cargado correctamente, ya que parece que no hay datos en este archivo. Parece que he cargado el nombre del archivo como una trama, en lugar del contenido de los datos. ¿He cometido algún error evidente que me impida cargar una trama en mi base de datos?
El PostGIS documentación proporciona un ejemplo de cómo cargar una trama, pero no entiendo qué argumentos son opcionales, y sigo sin tener claro qué debo usar si quiero utilizar el esquema por defecto. 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 los argumentos
-I -C -M
¿todo opcional? -
-t
parece ser el tamaño de las baldosas; ¿tengo que especificarlo si no tengo un esquema personalizado? -
¿Puedo omitir
myschema.demelevation
?
EDIT: 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
El resultado es una tabla con dos columnas rid
y rast
. rid
tiene cuatro valores, nad rast
no tiene. Cuando intento usar más argumentos:
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)
Obtengo el siguiente resultado. El resultado es una nueva tabla con la siguiente estructura:
Supongo que no se trata de una trama correctamente cargada, ya que no puedo ver los datos. ¿Hay alguna otra opción que pueda probar?
EDIT: Este último intento funcionó, sólo que no estaba accediendo a la trama correctamente.