访问量: 341 次浏览
下面我们试着读取一个 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']
下面看一下如何获取文件的一些基本信息,需要用到下面的 一些函数与属性。
GDAL 已经提供了足够的方便的函数,可以读取影像的的一 些信息,从而方便对数据进行处
还是使用 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 标志定义的。
>>> 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