আপনি 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