Skip to content

Instantly share code, notes, and snippets.

@gzagatti
Last active April 13, 2024 08:09
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save gzagatti/a649674d85b480b98b7d75b31d4c9555 to your computer and use it in GitHub Desktop.
Save gzagatti/a649674d85b480b98b7d75b31d4c9555 to your computer and use it in GitHub Desktop.
Loads raster data from POSTGIS directly to numpy.array using rasterio
import psycopg2
from rasterio.io import MemoryFile
conn = pscopg2.connect("<connection string>")
cur = conn.cursor()
# ensure that the GTiff driver is available,
# see https://postgis.net/docs/postgis_gdal_enabled_drivers.html
cur.execute('''
SET postgis.gdal_enabled_drivers TO 'GTiff';
SELECT ST_AsGDALRaster(rast, 'GTiff') FROM raster.table;
''')
for row in cur:
rast = row[0].tobytes()
with MemoryFile(rast).open() as dataset:
data_array = dataset.read()
print(data_array)
@fralc
Copy link

fralc commented Jun 5, 2020

Thanks for this snippet.
In order to retrieve a tiled raster as a whole I used ST_Union:

cur.execute('''
  SET postgis.gdal_enabled_drivers TO 'GTiff';
  WITH temp as (
    SELECT ST_Union(rast,1) As file_rast
    FROM raster.table
  )
  SELECT ST_AsGDALRaster(file_rast, 'GTiff') FROM temp;
 ''')

@ThomasG77
Copy link

FYI, there is a typo e.g

conn = pscopg2.connect("<connection string>")

should be

conn = psycopg2.connect("<connection string>")

@Mudassir551
Copy link

AttributeError: 'NoneType' object has no attribute 'tobytes'

I am getting this error Kindly guide me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment