He estado tratando de importar un gran ráster en una base de datos PostGIS 2.0 y toqué algunos escollos.
Inicialmente, cuando intentaba importar el ráster usando raster2pgsql, recibía el siguiente error: rt_band_set_pixel_line: Coordenadas fuera del rango
Después de encontrar esta página y usar gdalinfo, descubrí que el ráster excedía el tamaño máximo permitido de 65535 x 65535.
Salida de gdalinfo:
$ gdalinfo ari100.tif
Controlador: GTiff / GeoTIFF
... El tamaño es 42971, 77138 El
sistema de coordenadas es:
GEOGCS ["WGS 84",
...
AUTHORITY ["EPSG", "4326"]] Origin = (152.741676637167842, -26.215302802012008 )
Tamaño de píxel = (0.000009239757419, -0.000009239757419)
Metadatos:
AREA_OR_POINT =
Metadatos de estructura de imagen de área :
INTERLEAVE = BAND
Coordenadas de esquina:
Superior izquierda (152.7416766, -26.2153028) (152d44'30.04 "E, 26d12'55.09" S)
Inferior izquierda , -26.9280392) (152d44'30.04 "E, 26d55'40.94" S)
Superior derecha (153.1387183, -26.2153028) (153d 8'19.39 "E, 26d12'55.09 "S)
Inferior derecha (153.1387183, -26.9280392) (153d 8'19.39 "E, 26d55'40.94" S)
Centro (152.9401974, -26.5716710) (152d56'24.71 "E, 26d34'18.02" S)
Bloque de banda 1 = 42971x1 Tipo = Float32 , ColorInterp = Gris
...
Así que decidí usar la funcionalidad out-db usando el indicador -R en raster2pgsql.
De la documentación: Registre el ráster como un ráster del sistema de archivos (out-db). Solo los metadatos del ráster y la ubicación de la ruta al ráster se almacenan en la base de datos (no los píxeles).
Importé el ráster usando el siguiente comando:
raster2pgsql /gis/Flood/ari100.tif -R | psql -U username database
Pero cuando probé una consulta:
SELECT ST_Value(rast, ST_PointFromText('POINT(152.9632 -26.4878)')) FROM ari100
Obtuve el siguiente error:
NOTICE: Attempting to get pixel value with out of range raster coordinates: (23975, 29491)
CONTEXT: PL/pgSQL function "st_value" line 13 at RETURN
Sin embargo, si uso GDAL (a través de Python) para consultar el ráster directamente usando este script
python val_at_coord.py 152.9632 -26.4878
Puedo recuperar el valor correctamente.
Decidí encontrar la extensión del ráster en la base de datos:
SELECT ST_Height(rast) As rastheight, ST_Width(rast) As rastwidth from ari100;
rastheight | rastwidth
11602 | 42971
La altura es completamente incorrecta (debe ser 77138).
Entonces mi pregunta es: ¿hice algo mal (al usar raster2pgsql) o hay una limitación al usar rásteres out-db con PostGIS?
Gracias