Python与开源GIS:读取GeoTIF文件信息

2017-04-03 作者: bukun 浏览: 6213 次

摘要: 下面我们试着读取一个 GeoTiff 文件的信息。第一步就是打开一个数据集。 >>> from osgeo import gdal >>> dataset = gdal.Open("/bk/gdata/lu75c.tif") 既然已经将一个....

下面我们试着读取一个 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

随机推荐

Copyright © 2014-2017 OSGeo中国中心 吉ICP备05002032号

Powered by TorCMS