摘要: Python与开源GIS教程的内容,开发了单独的内容,请打开 https://www.osgeo.cn/pygis/ 查看。 本页面的内容不再更新。 下面我们试着读取一个 GeoTiff 文件的信息。第一步就是 打开一个数据集。 >...
本页面的内容不再更新。
下面我们试着读取一个 GeoTiff 文件的信息。第一步就是 打开一个数据集。
>>> from osgeo import gdal >>> dataset = gdal.Open("/bk/gdata/lu75c.tif")
既然已经将一个 GeoTIFF 文件打开为一个 GDAL 可操作的 对象,下面来看一下都能对其进行怎样的操作。
Python 提供了dir() 内省函数 ,可以快速查看一下当前 对象可用的操作:
>>> dir(dataset) ['AddBand', 'BuildOverviews', 'CreateMaskBand', 'FlushCache', 'GetDescription', ... tmethods__', '__swig_setmethods__', '__weakref__', '_s', 'this']
读取遥感影像的信息
下面看一下如何获取文件的一些基本信息,需要用到下面的 一些函数与属性。
- dataset.GetDescription() # 获得栅格的描述信息
- dataset.RasterCount # 获得栅格数据集的波段数
- dataset.RasterXSize # 栅格数据的宽度 (X 方向上的像素个数)
- dataset.RasterYSize # 栅格数据的高度 (Y 方向上的像素个数)
- dataset.GetGeoTransform() # 栅格数据的六参数。
- GetProjection() # 栅格数据的投影
读取影像的元数据
GDAL 已经提供了足够的方便的函数,可以读取影像的的一 些信息,从而方便对数据进行处
- TIFFTAG_DOCUMENTNAME
- TIFFTAG_IMAGEDESCRIPTION
- TIFFTAG_SOFTWARE
- TIFFTAG_DATETIME
- TIFFTAG_ARTIST
- TIFFTAG_HOSTCOMPUTER
- TIFFTAG_COPYRIGHT
- TIFFTAG_XRESOLUTION
- TIFFTAG_YRESOLUTION
- TIFFTAG_RESOLUTIONUNIT
- TIFFTAG_MINSAMPLEVALUE (read only)
- TIFFTAG_MAXSAMPLEVALUE (read only)
还是使用 Python 来访问一下看看:
>>> from osgeo import gdal >>> dataset = gdal.Open("/bk/gdata/img_landsat_subset_index.img") >>> dataset.GetMetadata() {'AREA_OR_POINT': 'Point', 'TIFFTAG_MAXSAMPLEVALUE': '255', 'TIFFTAG_MINSAMPLEVALUE': '1'}
这个文件只有两个 TIFF 标志进行了定义,还有一个并不是 TIFF 标志定义的。
GetDescription() 获得栅格的描述信息
>>> from osgeo import gdal >>> dataset = gdal.Open("/bk/gdata/L5115027_02720060922.tif") >>> dataset.GetDescription() '/bk/gdata/L5115027_02720060922.tif'
看来这里的图像描述是图像的路径名,但是这是和各种不同 数据集相关的,不同数据集有不同的描述。
获取栅格数目
栅格数据集是由多个数据构成的,在 GDAL 中,每一个波段,都是一个数据集;不仅如此,栅格数据集还可能包含有子数 据集,每子数据集又可能包含有波段。先来看一下刚才打开 的数据的RasterCount:
>>> dataset.RasterCount 2 7
这是一个由 7 个波段构成的 Landsat 遥感影像。
再看一个 MODIS L1B 数据:
>>> from osgeo import gdal >>> dataset = gdal.Open("/bk/gdata/MOD021KM.A2010001.0100.005.2010259103018.hdf") >>> dataset.RasterCount 4 0
居然是 0。这意味着当前的数据集dataset 中的栅格数目是 0。实际上,MODIS L1B 的数据格式是 HDF格式的,它的数据是以 子数据集组织的,要获取其相关的数据的信息, 需要继续访 问其子数据集。
影像大小
栅格数据的大小指出了影像以像元为单位的宽度与高度。
>>> img_width, img_height = dataset.RasterXSize, dataset.RasterYSize >>> img_width, img_height
可以看出我们的图像大小是 100 × 100 。
获得空间参考
下面看一下如果从栅格数据集中获取其投影与空间参考信息。
对于遥感影像来说,它需要在地理空间中进行定位。在 GDAL 中,这有两种方式,其中一种是使用六参数坐标转换模型。在 GDAL 中,这六个参数包括左上角坐标,像元 X、Y 方向大小,旋转 等信息。要注意,Y 方向的像元大小为负值。
>>> dataset.GetGeoTransform() (1852951.7603168152, 30.0, 0.0, 5309350.3601506073, 0.0, -30.0)
获得投影信息
使用GetProjection() 函数,可以比较容易地获取数据集的 投影信息。
>>> dataset.GetProjection() 'PROJCS["WGS 84 / UTM zone 52N",GEOGCS["unnamed",DATUM["unknown",SPHEROID["u ... ...gg "]],AUTHORITY["EPSG","32652"]]'
返回目录:Python与开源GIS