আপনি gdal.Dataset বা gdal.Band ReadRaster পদ্ধতি ব্যবহার করতে পারেন । দেখুন GDAL এবং OGR এপিআই টিউটোরিয়াল এবং নীচের উদাহরণে। রিডআাস্টারটি নম্পি ব্যবহার করে না / প্রয়োজন হয় না, ফেরতের মানটি কাঁচা বাইনারি ডেটা এবং স্ট্যান্ডার্ড পাইথন স্ট্রাক্ট মডিউলটি ব্যবহার করে প্যাক করা দরকার ।
একটি উদাহরণ:
from osgeo import gdal,ogr
import struct
src_filename = '/tmp/test.tif'
shp_filename = '/tmp/test.shp'
src_ds=gdal.Open(src_filename)
gt=src_ds.GetGeoTransform()
rb=src_ds.GetRasterBand(1)
ds=ogr.Open(shp_filename)
lyr=ds.GetLayer()
for feat in lyr:
geom = feat.GetGeometryRef()
mx,my=geom.GetX(), geom.GetY() #coord in map units
#Convert from map to pixel coordinates.
#Only works for geotransforms with no rotation.
px = int((mx - gt[0]) / gt[1]) #x pixel
py = int((my - gt[3]) / gt[5]) #y pixel
structval=rb.ReadRaster(px,py,1,1,buf_type=gdal.GDT_UInt16) #Assumes 16 bit int aka 'short'
intval = struct.unpack('h' , structval) #use the 'short' format code (2 bytes) not int (4 bytes)
print intval[0] #intval is a tuple, length=1 as we only asked for 1 pixel value
বিকল্পভাবে, যেহেতু আপনি ব্যবহার না করার জন্য যে কারণটি দিয়েছিলেন তা numpyহ'ল ব্যবহারের ক্ষেত্রে পুরো অ্যারেটি পড়া এড়ানো ReadAsArray(), নীচে একটি উদাহরণ যা numpyপুরো রাস্টারটিকে ব্যবহার করে এবং না পড়ে।
from osgeo import gdal,ogr
import struct
src_filename = '/tmp/test.tif'
shp_filename = '/tmp/test.shp'
src_ds=gdal.Open(src_filename)
gt=src_ds.GetGeoTransform()
rb=src_ds.GetRasterBand(1)
ds=ogr.Open(shp_filename)
lyr=ds.GetLayer()
for feat in lyr:
geom = feat.GetGeometryRef()
mx,my=geom.GetX(), geom.GetY() #coord in map units
#Convert from map to pixel coordinates.
#Only works for geotransforms with no rotation.
px = int((mx - gt[0]) / gt[1]) #x pixel
py = int((my - gt[3]) / gt[5]) #y pixel
intval=rb.ReadAsArray(px,py,1,1)
print intval[0] #intval is a numpy array, length=1 as we only asked for 1 pixel value