.. _trasterband: Raster band ___________ Number of bands +++++++++++++++ .. code-block:: python from girs.rast.raster import RasterReader from girs.rast.proc import composite rasters = [ 'D:/tmp/girs/chirps_basin/chirps-v2.0.2016.01.10.tif', 'D:/tmp/girs/chirps_basin/chirps-v2.0.2016.01.11.tif'] r0 = RasterReader(rasters[0]) r1 = composite(*rasters) print r0.get_band_count() print r1.get_band_count() Output:: 1 2 Band data type ^^^^^^^^^^^^^^ `get_band_data_type()` works in the same way as `get_nodata()` .. code-block:: python from girs.rast.raster import RasterReader from girs.rast.proc import composite rasters = [ 'D:/tmp/girs/chirps_basin/chirps-v2.0.2016.01.10.tif', 'D:/tmp/girs/chirps_basin/chirps-v2.0.2016.01.11.tif'] r0 = RasterReader(rasters[0]) r1 = composite(*rasters) print r0.get_band_data_type() print r0.get_band_data_type(1) print r0.get_band_data_type([1]) print r1.get_band_data_type() print r1.get_band_data_type(1) print r1.get_band_data_type([1]) print r1.get_band_data_type(2) print r1.get_band_data_type([2]) print r1.get_band_data_type([1, 2]) print r1.get_band_data_type([2, 1]) Output:: 6 6 [6] 6 6 [6] 6 [6] [6, 6] [6, 6] Get band ^^^^^^^^ `get_band()` returns a gdal band. If the dataset goes out of scope, the system will crash. It is recommendable to not use `get_band()`. Instead, retrieve from the band what you want directly using `girs`. The following will crash the system, because `dataset` goes out of scope after returning the function `my_wrong_get_band()`: .. code-block:: python def my_wrong_get_band(): from osgeo import gdal dataset = gdal.Open('D:/tmp/girs/chirps_basin/chirps-v2.0.2016.01.10.tif', gdal.GA_ReadOnly) return dataset.GetRasterBand(1) band = my_wrong_get_band() array = band.ReadAsArray() # crashes because dataset is deallocated (out of scope) The following also crashes: .. code-block:: python from osgeo import gdal fn = 'D:/tmp/girs/chirps_basin/chirps-v2.0.2016.01.10.tif' array = gdal.Open(fn, gdal.GA_ReadOnly).GetRasterBand(1).ReadAsArray() Also this crashes: .. code-block:: python band = RasterReader('D:/tmp/girs/chirps_basin/chirps-v2.0.2016.01.10.tif').get_band() array = band.ReadAsArray() The following works: it does not return `band`, but what we want from the band, namely in this case the array. .. code-block:: python from girs.rast.raster import RasterReader array = RasterReader('D:/tmp/girs/chirps_basin/chirps-v2.0.2016.01.10.tif').get_array() .. note:: Avoid using `get_band`