¿Cómo importar un ráster en PostGIS?

8

Estoy tratando de seguir las instrucciones aquí para cargar un ráster en una base de datos PostGIS:

python raster2pgsql.py -s 4269 -I -r *.tif -F myschema.demelevation -o elev.sql

Entiendo que lo reemplazo *con el camino a mi trama, pero no entiendo la parte myschema.demelevationo elev.sql. ¿Debo tener mi propio esquema para este archivo? ¿Y qué significa la elev.sqlparte?

También leí el controlador ráster gdal PostGIS para intentar entender esto con más ejemplos. Del mismo modo, sugieren cargar un rásterkatrina

python raster2pgsql.py -r /path/to/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

Usando mi configuración actual, intenté cargar el katrinaráster en:

    python2.6 ~/src/postgis-2.0.0SVN/raster/scripts/python/raster2pgsql.py -r ~/tmp/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

Sin embargo, obtuve los siguientes errores:

Traceback (most recent call last):
  File "/home/src/postgis-2.0.0SVN/raster/scripts/python/raster2pgsql.py", line 34, in <module>
    from osgeo import gdal
  File "/home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/__init__.py", line 21, in <module>
    _gdal = swig_import_helper()
  File "/home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/__init__.py", line 17, in swig_import_helper
    _mod = imp.load_module('_gdal', fp, pathname, description)
ImportError: /home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/_gdal.so: undefined symbol: GDALSetRasterUnitType

No entiendo completamente estos errores significan; cuando compilé, ¿ gdaldebería haber especificado un argumento para GDALSetRasterUnitType?

En general, tengo dificultades para entender por qué no estoy especificando la base de datos en la que estoy tratando de cargar estos datos.


Después de seguir el consejo de MerseViking corrí:

python /usr/lib/postgresql/8.4/bin/raster2pgsql.py -r /home/celenius/Downloads/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

que devolvió el siguiente resultado:

------------------------------------------------------------
 Summary of GDAL to PostGIS Raster processing:
------------------------------------------------------------
Number of processed raster files: 1 (/home/celenius/Downloads/katrina.tif)
List of generated tables (number of tiles):
1   katrina (256)

Entonces corrí:

psql -d test -f katrina.sql - U postgres -W

que devolvió lo siguiente:

    addrastercolumn                                                                                                                                                                                        
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 public.katrina.rast srid:4326 pixel_types:{8BUI,8BUI,8BUI} out_db:false regular_blocking:true nodata_values:NULL scale_x:'0.029325513196481' scale_y:'-0.029325513196481' blocksize_x:'64' blocksize_y:'64' extent:POLYGON((-100.014662756598 9.98533724340176,-100.014662756598 40.0146627565982,-69.9853372434018 40.0146627565982,-69.9853372434018 9.98533724340176,-100.014662756598 9.98533724340176))
(1 row)

(END)

Este mensaje y un cursor parpadeante aparecen en la pantalla. Supongo que se está cargando en la base de datos, pero no estoy seguro. El tifarchivo tiene solo 3 MB: supuse que no tardaría mucho en cargar un archivo de este tamaño, pero el cursor parpadeante ya ha estado en la pantalla durante aproximadamente 1 hora. ¿Se ha bloqueado esto o solo necesito esperar mucho tiempo? Tengo 4 GB de RAM y un procesador dual de 2.5 GHz.

djq
fuente
He descubierto que si presiono la tecla q, ejecuta este comando e inserta los datos en la base de datos test. ¿Es este comportamiento normal y debería estar haciendo esto?
djq

Respuestas:

3

Parece que hay un error tipográfico en esa página; En la linea:

python raster2pgsql.py -s 4269 -I -r *.tif -F myschema.demelevation -o elev.sql

El -Fparámetro debe ser el -tque especifica el nombre de la tabla para importar los datos. La parte anterior a la .es el nombre de esquema opcional si desea que su tabla esté en un esquema distinto de public. El -oparámetro especifica el archivo generado por el script Python. Este archivo es la representación SQL de la definición de su tabla y los datos reales del ráster de origen, por lo que puede ser bastante grande. Una vez que se genera este archivo, debe ejecutarlo psql -d <db_name> -f elev.sqlpara completar la base de datos, después de lo cual se puede eliminar.

Sin embargo, lo que me parece extraño es que está llamando raster2pgsql.pydesde el directorio de origen de PostGIS 2.0 . ¿Realmente compiló (ejecutando make) e instaló (ejecutándose make installcomo root) PostGIS 2.0? Debido a que debe estar en su camino, y IIRC el instalador actualiza automáticamente su PYTHON_PATHvariable de entorno.

En cuanto a lo que falta GDALSetRasterUnitType, lo primero que verificaría es que no tenga instalada una versión anterior de las bibliotecas GDAL que Python está recogiendo en lugar de 1.8.1. Pruebe gdalinfo --version Este sitio puede arrojar algo de luz sobre su problema.

MerseyViking
fuente
Gracias por las sugerencias. Lo probaré. Estoy bastante confundido acerca de cómo llamar a este script. He corrido makey make installdebería haberlo llamado ./bin/raster2pgsql.py. Estoy usando un alojamiento compartido que no tiene acceso de root, pero puedo instalar programas. Cuando corro gdalinfo --versionme sale GDAL 1.5.3, released 2008/09/09; cual es la versión del servidor; He instalado GDAL 1.8.1 pero este comando no lo está utilizando.
djq