rt_raster_to_gdal : 출력 GDAL 드라이버를로드 할 수 없습니다
ST_AsTIFF 의 첫 번째 오류는 GDAL 드라이버를 활성화해야합니다. GDAL 드라이버는 기본적으로 PostGIS 2.1에서 활성화되어 있지 않습니다. 이를 수행하는 방법에 대한 매뉴얼 을 참조하십시오 . 예를 들어 Windows 컴퓨터에 다음과 같은 환경 변수가 설정되어 있습니다.
POSTGIS_GDAL_ENABLED_DRIVERS=GTiff PNG JPEG GIF XYZ DTED USGSDEM AAIGrid
PostGIS를 통해 다음을 확인할 수 있습니다.
SELECT short_name, long_name
FROM ST_GDALDrivers();
Numpy에 PostGIS
GDAL이 Numpy 배열로 읽을 수 있도록 출력을 가상 메모리 GeoTIFF 파일로 내보낼 수 있습니다. GDAL에서 사용되는 가상 파일에 대한 힌트는 이 블로그 게시물을 참조하십시오 .
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
래스터 화 된 버퍼 포인트를 나타냅니다.
[[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]]
이 예제에서는 'GTiff'형식을 사용했지만 다른 형식 이 더 적합 할 수 있습니다. 예를 들어 인터넷 속도가 느린 연결을 통해 전송해야하는 큰 래스터가있는 경우 'PNG'를 사용하여 압축하십시오.