Cargar un ráster en una base de datos PostGIS 2.0 en Windows

17

Estoy intentando descubrir cómo cargar un ráster en una base de datos PostGIS2.0 (he hecho preguntas anteriores sobre este tema here y here ). Estoy tratando de usar el programa raster2pgsql.exe provisto con PostGIS2.0.

Después de descubrir 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 presione ctrl + shift + enter ) para habilitar a raster2pgsql.exe para que funcione, de alguna manera he logrado cargar un ráster en mi base de datos. Tengo un archivo ráster llamado ras_test.tif que coloqué temporalmente en la carpeta bin de mi instalación postgresql . Usando el siguiente código, convierto y cargo este raster:

C:\Program Files (x86)\PostgreSQL.1\bin>raster2pgsql -s 102003 ras_test.tif -t> elev.sql
Processing 1/1: ras_test.tif

C:\Program Files (x86)\PostgreSQL.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í:

Sinembargo,nohepodidoverestoenQGISynoestoysegurodesilocarguécorrectamenteyaquenoparecehaberdatosenestearchivo.Parecequehecargadoelnombredelarchivocomounráster,enlugardelcontenidodelosdatos.¿Hecometidoerroresobviosquemeimpidencargarunrásterenmibasededatos?

La documentación de PostGIS proporciona un ejemplo de cómo cargar un raster, pero no entiendo qué argumentos son opcionales, y aún 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
  1. ¿Tengo que proporcionar un SRID? -s 4236

  2. ¿Los argumentos -I -C -M son opcionales?

  3. -t parece ser el tamaño del mosaico; ¿Debo especificar esto si no tengo un esquema personalizado?

  4. ¿Puedo simplemente dejar myschema.demelevation ?

EDITAR: He incluido el resultado de las sugerencias a continuación:

C:\Program Files (x86)\PostgreSQL.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 intento usar algunos argumentos más:

C:\Program Files (x86)\PostgreSQL.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 esto no es un ráster cargado correctamente ya que no puedo ver los datos. ¿Hay otras opciones que pueda probar?

EDITAR: este último intento funcionó, simplemente no estaba accediendo al ráster correctamente.

    
pregunta djq 28.12.2011 - 01:16

3 respuestas

5

SRID? -s 4236 (requerido)

¿Los argumentos -I -C -M son todos opcionales?

-C Aplicar restricciones de ráster: srid, pixelsize, etc. para garantizar que el ráster esté correctamente registrado en la vista raster_columns. (requerido)

-M (Vacío analiza la tabla de trama). opcional

-I (Crear un índice GiST en la columna ráster.) opcional pero recomendado

-t TILE_SIZE (corte el ráster en mosaicos para insertar uno por fila de la tabla. TILE_SIZE se expresa como WIDTHxHEIGHT.)

myschema.demelevation excluido (sí)

enlace

    
respondido por el Mapperz 29.12.2011 - 16:15
9

Celenius,

Si no usa la opción -t con dimensiones de tamaño, entonces su archivo raster entrará como un solo registro. Acabo de notar un error en la documentación que probablemente es lo que te confunde. Voy a arreglar eso. El -t siempre debe ir seguido de una widthxheight.

Si desea que esté fragmentado, digamos en 100x100 píxeles de ancho de ancho, como dice Mapperz, use la opción -t.

Entonces tu comando sería:

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

Eche un vistazo al ejemplo de antena en los documentos. enlace

¿Cuál es el que usan muchos de los ejemplos manuales?

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

Sé que los interruptores pueden ser un poco desalentadores porque hay muchos y la mayoría son opcionales. Tal vez en 2.1 tengamos una gui similar a shp2pgsql-gui para hacer esto un poco más simple para los novatos.

En la última verson de raster2pgsql hay lógica para inferir el srid a partir de la información de georreferencia en el tif u otro archivo raster (esta versión está disponible ahora como ventana binaria). Todavía no he probado esa función, pero si funciona, incluso puedes dejar de lado el srid y lo adivinará (con suerte, correctamente).

    
respondido por el LR1234567 08.01.2012 - 20:07
-2

En la vista SQL, no puede ver datos cuando es grande. Puede ejecutar la consulta en un archivo y mostrará los datos.

    
respondido por el saurabh 08.09.2013 - 20:34

Lea otras preguntas en las etiquetas