GDAL python教程基础篇(9)GDAL读取遥感影像

1.打开已有的GeoTIF文件

通过Open函数可以打开影像。

from osgeo import gdal
dataset = gdal.Open("/gdata/geotiff_file.tif")

通过Open函数将一个GeoTIFF文件打开为一个GDAL可操作的对象。Python提供了 dir() 内省函数, 可以快速查看一下当前对象可用的操作。它可以返回传递给它的任何对象的属性名称经过排序的列表。 如果不指定对象,则 dir() 返回当前作用域中的名称。

2.获取影像信息

2.1影像元数据

常用的GeoTIFF文件的元数据信息。 GDAL可以作为数据集级别的元数据来处理下面的基本的TIFF标志。
在这里插入图片描述
使用Python来访问一下:

>>> from osgeo import gdal
>>> dataset = gdal.Open("/gdata/geotiff_file.tif")
>>> dataset.GetMetadata()
{'AREA_OR_POINT': 'Area', 'PyramidResamplingType': 'NEAREST'}

GetMetadata() 方法可以访问数据的元数据信息,元数据信息对于每个数据都是不一样的。 比如再打开另外一个文件:

>>> ds = gdal.Open('/gdata/lu75c.tif')
>>> ds.GetMetadata()
{'AREA_OR_POINT': 'Area',
 'TIFFTAG_XRESOLUTION': '1',
 'TIFFTAG_YRESOLUTION': '1'}

这个文件只对两个TIFF标志进行了定义,还有一个并不是TIFF标志定义的。

2.2GetDescription() 获得栅格的描述信息

 dataset.GetDescription()
'/gdata/geotiff_file.tif'

看来这里的图像描述是图像的路径名, 但是这是和各种不同数据集相关的, 不同数据集有不同的描述。

2.3获取栅格数目

栅格数据集是由多个数据构成的,在GDAL中,每一个波段,都是一个数据集; 不仅如此,栅格数据集还可能包含有子数据集,每子数据集又可能包含有波段。

>>> dataset.RasterCount
3

这是一个由7个波段构成的Landsat遥感影像。

2.4影像大小

栅格数据的大小指出了影像以像元为单位的宽度与高度。

>>> dataset.RasterXSize,dataset.RasterYSize
(1500, 900)

2.5获得空间参考

从栅格数据集中获取其投影与空间参考信息。
GetGeoTransform() 地理仿射变换参数。

对于遥感影像来说,它需要在地理空间中进行定位。 在GDAL中,这有两种方式,其中一种是使用六个参数坐标转换模型。 这个模型的具体实现在不同的软件中是不一样的。 在GDAL中,这六个参数包括左上角坐标,像元X、Y方向大小,旋转等信息。 要注意,Y方向的像元大小为负值。

>>> ds.GetGeoTransform()
(1852951.7603168152, 30.0, 0.0, 5309350.360150607, 0.0, -30.0)

2.6获得投影信息

使用 GetProjection() 函数,可以比较容易地获取数据集的投影信息。

>>> ds.GetProjection()

2.7 使用GDAL获取栅格数据波段信息

获取数据集的波段GetRasterBand() 函数,可以获得栅格数据集的波段。这是函数的参数使用波段的索引值。

>>> from osgeo import gdal
>>> dataset = gdal.Open('/gdata/lu75c.tif')
>>> dataset.RasterCount
1
>>> band = dataset.GetRasterBand(1)

这里获取了第一个波段(红色值组成的表)。 注意!这里的波段获取和通常的C数组获取不一样,开始是1不是0。

2.7.1查看波段的基本信息

与操作数据集一样,GDAL同样提供了查看波段基本信息的函数。

band = dataset.GetRasterBand(1)

2.7.2获取波段大小

>>> band.XSize, band.YSize, band.DataType
(6122, 4669, 3)

执行以上代码得到了波段图像的宽和高(像元为单位)。 对于我们所使用的影像, 这个与 dataset 中使用 RasterXSize() 与 RasterYSize() 获取的值一致。DataType是图像中实际数值的数据类型,表示8位无符整型。

2.7.3获取波段数据的属性

>>> band.GetNoDataValue()
>>> band.GetMaximum()
>>> print(band.GetMinimum())
None
>>> band.ComputeRasterMinMax()
(-1.0, 66.0)

Maximum 是表示在本波段数值中最大的值,当然 Minimum 就是表示本波段中最小的值。 通过运行结果,我们可以看到在一开始RasterXSize()和RasterYSize()都没有值。 因为对于文件格式不会有固有的最大最小值。 所以我们可以通过函数ComputeRasterMinMax() 计算得到。 注意!这里的最大最小值不包括“无意义值”! 也就是上面显示的 NoDataValue 。

猜你喜欢

转载自blog.csdn.net/qq_45373844/article/details/129699592