py#gdal读写栅格
1)栅格数读取
from osgeo import gdal import numpy as np #打开栅格数据集,只读 dataset=gdal.Open("E:/DATA/Image.TIF",gdal.GA_ReadOnly) #读取图像信息 #数据格式 print("Driver: {}/{}".format(dataset.GetDriver().ShortName, dataset.GetDriver().LongName)) #栅格尺寸及波段数 print("Size is {} x {} x {}".format(dataset.RasterXSize, dataset.RasterYSize, dataset.RasterCount)) #投影坐标 print("Projection is {}".format(dataset.GetProjection())) geotransform = dataset.GetGeoTransform() if geotransform: print("Origin = ({}, {})".format(geotransform[0], geotransform[3])) print("Pixel Size = ({}, {})".format(geotransform[1], geotransform[5])) #将栅格值转为array #gdal中波段从1开始,不是从0开始 #读取之后array.shape=(RasterYSize,RasterXSize),RasterY是纵轴方向即行数,RasterX为横轴方向即列数 band = dataset.GetRasterBand(1).ReadAsArray()
2)栅格数据掩模处理
#提取小于等于1的影像,掩膜设为band>1 band_index=np.where(band>1) band[band_index]=np.nan
3)栅格数据写入
#先建立一个数据框架,确定输出数据的格式(GTiff),文件名称,尺寸大小以及数值类型,尺寸大小先输入RasterX,即array的列数shape[1],再输入RasterY,即array的行数shape[0] gtiff_driver=gdal.GetDriverByName('GTiff') out_ds=gtiff_driver.Create('test.tif',band.shape[1],band.shape[0],1,gdal.GDT_Float32) #设置输出数据的坐标系 out_ds.SetProjection(dataset.GetProjection()) out_ds.SetGeoTransform(dataset.GetGeoTransform()) #将运算之后的波段信息写入数据框架中 out_ds.GetRasterBand(1).WriteArray(band) #完成写入,清除数据集 out_ds=None