Python与GDAL初步(一):栅格读写

一、读

from osgeo import gdal

dataset = gdal.Open(dir) #dir--文件全路径

将影像打开为osgeo.gdal.Dataset,可以通过一些方法或函数查看其属性

dataset.RasterCount #获取波段数目
dataset.RasterXSize #获取影像宽度
dataset.RasterYSize #获取影像高度
dataset.GetProjection() #获取投影信息
dataset.GetGeoTransform() #获取仿射变换参数

这里重点说一下GetGeoTransform(),函数的输出为一个元组,可以通过list()转换为列表。输出包含六个值,分别为:
  GT(0)和GT(3)
是第一组,表示图像左上角的地理坐标;
  GT(1)和GT(5)
是第二组,表示图像横向和纵向的分辨率(一般这两者的值相等,符号相反,横向分辨率为正数,纵向分辨率为负数);
  GT(2)和GT(4)
是第三组,表示图像旋转系数,对于一般图像来说,这两个值都为0。

dataset不能直接进行可视化等操作,需要进一步对其进行操作,这里可以实现两类操作:

1.Raster模式

band = dataset.GetRasterBand(i) #i为波段号

band的格式为osgeo.gdal.Band,需要注意的是波段号与通常的矩阵等不同,从1开始。通过一些方法或函数可以获取波段数据的属性。

band.XSize #波段宽
band.YSize #波段高
band.DataType #波段数据类型
band.GetNoDataValue() #波段无属性值
band.GetMaximum() #获取最大值
band.ComputeRasterMinMax() #计算最大最小值

需要注意的是DataType方法。该方法的返回值是一个整数值,而非直接获得数据类型名称,需要我们通过对应表进行对照。我这里建立了一个字典,方便大家自取。

dict = {
   
0:GDT_Unknown
1:GDT_Byte
2:GDT_UInt16
3:GDT_Int16
4:GDT_UInt32
5:GDT_Int32
6:GDT_Float32
7:GDT_Float64
8:GDT_CInt16
9.GDT_CInt32
10:GDT_CFloat32
11:GDT_CFloat64
}

下一步就是获取波段数据并进行操作,将波段读为Raster(即二进制)使用的是ReadRaster()函数

band.ReadRaster(xoff=0, yoff=0,  #指定想要读取的部分原点位置在整张图像中距离全图原点的位置(以像元为单位)
	xsize=None, ysize=None, # 指定要读取部分图像的矩形的长和宽(以像元为单位࿰

你可能感兴趣的:(GDAL_python,python,gdal)