Skip to content

Download Transformations Documentation

Documentation for the terrakit.download.transformations.* functions

impute_nans_xarray(da: DataArray, nodata_value=-9999) -> DataArray

Impute NaN values in an xarray DataArray using nearest neighbor interpolation.

Parameters:

Name Type Description Default
da DataArray

The input DataArray.

required
nodata_value int

The value representing missing data.

-9999

Raises:

Type Description
TerrakitBaseException

If an error occurs during transformation.

Returns:

Type Description
DataArray

xarray.DataArray: The imputed DataArray.

Source code in terrakit/download/transformations/impute_nans_xarray.py
def impute_nans_xarray(da: DataArray, nodata_value=-9999) -> DataArray:
    """
    Impute NaN values in an xarray DataArray using nearest neighbor interpolation.

    Parameters:
        da (xarray.DataArray): The input DataArray.
        nodata_value (int): The value representing missing data.

    Raises:
        TerrakitBaseException: If an error occurs during transformation.

    Returns:
        xarray.DataArray: The imputed DataArray.
    """
    logger.info("Imputing NaNs in xarray data array.")
    try:
        total_nodata_pixels = np.count_nonzero(da.isin([nodata_value]))
        if total_nodata_pixels > 0:
            for d in range(0, da.shape[0]):
                for i in range(0, len(da["band"])):
                    slice_dims = da[d, i] if da.ndim == 4 else da[i]
                    interpolated = slice_dims.rio.interpolate_na("nearest")
                    if da.ndim == 4:
                        da[d, i, :, :] = interpolated
                    else:
                        da[i, :, :] = interpolated
        else:
            logger.info("Skipping imputation as no nodata pixels found")
    except Exception as e:
        err_msg = f"An error occurred running 'impute_nans_xarray' with '{nodata_value=}': {e}"
        logger.error(err_msg)
        raise TerrakitBaseException(err_msg)

    return da

scale_data_xarray(da: DataArray, scaling_factors: list) -> DataArray

Scale the values in an xarray DataArray by given scaling factors.

Parameters:

Name Type Description Default
da DataArray

The input DataArray.

required
scaling_factors list

A list of scaling factors corresponding to each band.

required

Raises:

Type Description
TerrakitBaseException

If an error occurs during transformation.

Returns:

Type Description
DataArray

xarray.DataArray: The scaled DataArray.

Source code in terrakit/download/transformations/scale_data_xarray.py
def scale_data_xarray(da: DataArray, scaling_factors: list) -> DataArray:
    """
    Scale the values in an xarray DataArray by given scaling factors.

    Parameters:
        da (xarray.DataArray): The input DataArray.
        scaling_factors (list): A list of scaling factors corresponding to each band.

    Raises:
        TerrakitBaseException: If an error occurs during transformation.

    Returns:
        xarray.DataArray: The scaled DataArray.
    """
    try:
        for b in range(0, len(scaling_factors)):
            da[:, b] = da[:, b] * scaling_factors[b]
    except Exception as e:
        err_msg = f"An error occuring running 'scale_data_xarray' with '{scaling_factors=}': {e}"
        logger.error(err_msg)
        raise TerrakitBaseException(err_msg)
    return da