""" Classes, functions, etc. core to the module
"""
from collections import namedtuple
import numpy as np
import rasterio
from ._util import lazy_property
#: easy access container for a bounding box
BoundingBox = namedtuple('BoundingBox', ('left', 'bottom', 'right', 'top'))
[docs]class Band(object):
""" Basically just a rasterio dataset with extra metadata
Basically just benefit from composition by sitting on top of ``rasterio``
over re-implementing any related methods.
Metadata will, when relevant, try to follow the variable names suggested
by the NetCDF Climate and Forecast (CF) Metadata Conventions.
Args:
path (str): the path of the raster image to use
bidx (int): 1-indexed band from within the dataset to use
standard_name (str): a standard name that references a description
of the variable
long_name (str): a descriptive, but not standardized, description of
the variable
friendly_name (str): a cross-sensor friendly name to refer to (e.g.,
'blue' instead of band1)
units (str): unit of variable
fill (int or float): fill value for NoData or NaN
valid_min (int or float): smallest valid value of band data
valid_max (int or float): largest valid value of band data
scale_factor (int or float): if present, data will be scaled by this
number
"""
def __init__(self, path, bidx=1,
standard_name='', long_name='', friendly_name='',
units='', fill=np.nan,
valid_min=None, valid_max=None, scale_factor=1):
self.path = path
self.bidx = bidx
self.standard_name = standard_name
self.long_name = long_name
self.friendly_name = friendly_name
self.units = units
self.fill = fill
self.valid_min = valid_min
self.valid_max = valid_max
self.scale_factor = scale_factor
@lazy_property
def src(self):
""" rasterio._io.RasterReader: the Band dataset opened with rasterio
"""
with rasterio.Env(): # TODO: insert Env options
src = rasterio.open(self.path)
return src
@src.setter
def src(self, _src):
self._src = _src
@property
def band(self):
""" rasterio.Band: The band from ``self.src`` opened with rasterio
"""
return rasterio.band(self.src, self.bidx)