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


18

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.exeprograma 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 cmden la barra de búsqueda y presione ctrl+ shift+ enter) para habilitar la raster2pgsql.exefunción que he logrado cargar un ráster en mi base de datos. Tengo un archivo raster llamado ras_test.tifque coloqué temporalmente en la bincarpeta de mi postgresqlinstalació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í:

ingrese la descripción de la imagen aquí

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
  1. ¿Tengo que proporcionar un SRID? -s 4236

  2. ¿Son -I -C -Mtodos los argumentos opcionales?

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

  4. ¿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 ridy rast. ridtiene cuatro valores, nad rastno 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:

ingrese la descripción de la imagen aquí

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.


raster2pgsql se refiere a la referencia postgis.org/documentation/manual-svn/…
Mapperz

Traté de cargar el archivo ráster (jpg) en post gis usando la sintaxis provista aquí "C: \ Archivos de programa (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 "Pude ver una tabla ráster creada en la base de datos. Fue tal como lo muestra Celenius, donde no ve nada debajo de la columna "raster de rastreo" a menos que haga clic en una celda en particular. Aquí está mi problema real. Cómo ver la capa ráster desde ArcGIS usando la capa de consulta sql. Cuando intenté agregar esta capa y validarla, dice "rast raster
GISTECH

Creo que deberías hacer esto como una nueva pregunta, ya que obtendrás más respuestas. No sé cómo puede conectarse usando ArcGIS, pero puede usar QGIS para acceder a él.
djq

1
Nota: pgAdminIII muestra una celda en blanco para datos más allá de cierto tamaño; ver boleto # 297
Mike T

la consulta anterior funciona, pero ¿alguien puede decirme cómo almacenar valores de píxeles / valores de celda en la tabla?

Respuestas:


5

SRID? -s 4236 (requerido)

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

-C Aplicar restricciones de ráster: cuadrícula, tamaño de píxel, etc. para garantizar que el ráster se registre correctamente en la vista de columnas de ráster. (necesario)

-M (Análisis de vacío de la tabla ráster). 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 tabla. TILE_SIZE se expresa como WIDTHxHEIGHT).

myschema.demelevation dejar fuera (sí)

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


Gracias Mapperz, entendí parcialmente cómo funciona raster2pgsql; sin embargo, mi ráster en postgresql contiene solo una celda, por eso estoy tratando de averiguar qué argumentos usar.
djq

9

Celenius

Si no utiliza la -topción con dimensiones de tamaño, su archivo ráster aparecerá como un único registro. Acabo de notar un error en los documentos que probablemente sea lo que te confunde. Lo arreglaré El -tsiempre debe ser seguido por un widthxheight.

Si desea que se fragmente, diga en una altura de ancho de píxeles de 100x100, como dice Mapperz, use la opción -t.

Entonces su comando sería:

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

Echa un vistazo al ejemplo aéreo en los documentos. http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader

Cuál es el que usan muchos ejemplos de 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 son muchos y la mayoría son opcionales. Quizás en 2.1 tendremos una interfaz gráfica de usuario similar a la shp2pgsql-guide hacer esto un poco más simple para los novatos.

En la última versión de raster2pgsqlhay lógica para inferir la cuadrícula a partir de la información de georreferencia en el archivo tif u otro archivo ráster (esta versión está disponible como ventana binaria ahora). Todavía no he probado esa característica, pero si funciona, incluso puede omitir el srid y adivinará (con suerte).


Gracias por las sugerencias! Todavía no puedo hacerlo funcionar, pero empiezo a entender los interruptores un poco mejor.
djq

Funcionó, pero no entendí cómo debería verse esto dentro de la base de datos. De nuevo, gracias por tu ayuda.
djq

¿Finalmente llegó la GUI para cargar rásteres en pgsql? :)
astrojuanlu

-2

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


1
La pregunta original (antigua) ya tiene una respuesta aceptada y la suya no es realmente una solución alternativa a la pregunta, sino más bien una llamada a inspección visual.
Curlew
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.