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.
Respuestas:
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
fuente
Celenius
Si no utiliza la
-t
opció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-t
siempre 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:
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-gui
de hacer esto un poco más simple para los novatos.En la última versión de
raster2pgsql
hay 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).fuente
En la vista SQL, no puede ver datos cuando es grande. Puede ejecutar la consulta en un archivo y mostrará los datos.
fuente