rt_raster_to_gdal: GDAL ড্রাইভার আউটপুট লোড করা যায়নি
ST_AsTIFF- র সাথে প্রথম ত্রুটি হিসাবে , আপনাকে আপনার জিডিএল ড্রাইভারগুলি সক্ষম করতে হবে, যা ডিফল্টরূপে পোস্টজিআইএস ২.১ এর জন্য সক্ষম নয়। এটি করার উপায়গুলিতে ম্যানুয়ালটি দেখুন । উদাহরণস্বরূপ, উইন্ডোজ কম্পিউটারে আমার সাথে একটি পরিবেশের পরিবর্তনশীল সেটআপ রয়েছে:
POSTGIS_GDAL_ENABLED_DRIVERS=GTiff PNG JPEG GIF XYZ DTED USGSDEM AAIGrid
যা পোস্টজিআইএসের সাথে নিশ্চিত করা যায়:
SELECT short_name, long_name
FROM ST_GDALDrivers();
নম্পিকে পোস্টজিআইএস করুন
নম্পি অ্যারেতে পড়তে আপনি জিডিএল-এর জন্য ভার্চুয়াল মেমরি জিওটিআইএফএফ ফাইলটিতে আউটপুট রফতানি করতে পারেন। জিডিএল-তে ব্যবহৃত ভার্চুয়াল ফাইলগুলিতে ইঙ্গিতগুলির জন্য, এই ব্লগ পোস্টটি দেখুন ।
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]]
মনে রাখবেন যে আমি উদাহরণে একটি 'জিটিফ' ফর্ম্যাট ব্যবহার করেছি, তবে অন্যান্য ফর্ম্যাটগুলি আরও উপযুক্ত হতে পারে। উদাহরণস্বরূপ, যদি আপনার কাছে ধীরে ধীরে ইন্টারনেট সংযোগ জুড়ে স্থানান্তরিত হওয়া কোনও বড় রাস্টার থাকে তবে এটি সংকোচনের জন্য 'পিএনজি' ব্যবহার করে চেষ্টা করুন।