rt_raster_to_gdal: आउटपुट GDAL ड्राइवर लोड नहीं कर सका
ST_AsTIFF के साथ पहली त्रुटि के लिए , आपको अपने GDAL ड्राइवरों को सक्षम करने की आवश्यकता है, जो डिफ़ॉल्ट रूप से PostGr 2.1 के लिए सक्षम नहीं हैं। ऐसा करने के तरीकों पर मैनुअल देखें । उदाहरण के लिए, मेरे पास विंडोज कंप्यूटर पर एक पर्यावरण चर है:
POSTGIS_GDAL_ENABLED_DRIVERS=GTiff PNG JPEG GIF XYZ DTED USGSDEM AAIGrid
जिसकी पुष्टि PostGIS के साथ की जा सकती है:
SELECT short_name, long_name
FROM ST_GDALDrivers();
PostGIS to Numpy
आप 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' का उपयोग करके देखें।