rt_raster_to_gdal: no se Pudo cargar la salida de GDAL conductor
En cuanto al primer error con ST_AsTIFF, necesita habilitar su GDAL los conductores, que por defecto no están habilitados para PostGIS 2.1. Consulte el manual de maneras de hacer esto. Por ejemplo, yo tengo una variable de entorno configurar en un equipo Windows con:
POSTGIS_GDAL_ENABLED_DRIVERS=GTiff PNG JPEG GIF XYZ DTED USGSDEM AAIGrid
lo que puede ser confirmado con PostGIS con:
SELECT short_name, long_name
FROM ST_GDALDrivers();
PostGIS para Numpy
Puede exportar los resultados a una memoria virtual GeoTIFF archivo para GDAL para leer en una Colección de la matriz. Para obtener más información sobre archivos virtuales utilizados en GDAL, ver esta entrada del blog.
import os
import psycopg2
from osgeo import gdal
# Adjust this to connect to a PostGIS database
conn = psycopg2.connect(...)
curs = conn.cursor()
# Make a dummy table with raster data
curs.execute("""\
SELECT ST_AsRaster(ST_Buffer(ST_Point(1, 5), 10), 10, 10, '8BUI', 1) AS rast
INTO TEMP mytable;
""")
# Use a virtual memory file, which is named like this
vsipath = '/vsimem/from_postgis'
# Download raster data into Python as GeoTIFF, and make a virtual file for GDAL
curs.execute("SELECT ST_AsGDALRaster(rast, 'GTiff') FROM mytable;")
gdal.FileFromMemBuffer(vsipath, bytes(curs.fetchone()[0]))
# Read first band of raster with GDAL
ds = gdal.Open(vsipath)
band = ds.GetRasterBand(1)
arr = band.ReadAsArray()
# Close and clean up virtual memory file
ds = band = None
gdal.Unlink(vsipath)
print(arr) # this is a 2D numpy array
Muestra una rasterised búfer punto.
[[0 0 0 1 1 1 1 0 0 0]
[0 1 1 1 1 1 1 1 1 0]
[0 1 1 1 1 1 1 1 1 0]
[1 1 1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 1 0]
[0 1 1 1 1 1 1 1 1 0]
[0 0 0 1 1 1 1 0 0 0]]
Tenga en cuenta que he usado un 'GTiff' formato en el ejemplo, pero en otros formatos, podría ser más adecuado. Por ejemplo, si usted tiene una gran trama que necesita ser transferido a través de una conexión lenta a internet, trate de usar 'PNG' a comprimirlo.