Function API Reference

Main user-facing FCPGtools functions.

This file contains the user-facing tools imported when one imports fcpgtools. All functions can accept inputs either as in memory objects (i.e. xarray.DataArray + geopandas.GeoDataFrame) or string/pathlib.Path inputs. Additionally, many functions have a out_path parameter that allows outputs to be saved to a path in addition to the function returning an in-memory object.

See function specific documentation here: https://fcpgtools.readthedocs.io/en/latest/functions.html

See examples of use here: https://fcpgtools.readthedocs.io/en/latest/cookbook.html

accumulate_flow(d8_fdr: xarray.DataArray | str | Path, engine: SupportsAccumulateFlow = 'pysheds', upstream_pour_points: PourPointValuesDict | None = None, weights: xarray.DataArray | None = None, out_path: str | Path | None = None, **kwargs) xarray.DataArray[source]

Create a Flow Accumulation Cell (FAC) raster from a D8 Flow Direction Raster.

Parameters:
  • d8_fdr – A D8 Flow Direction Raster (dtype=Int).

  • engine – A terrain engine class that supports flow accumulation.

  • upstream_pour_points – A list of lists each with with coordinate tuples as the first item [0], and updated cell values as the second [1]. This allows the FAC to be made with boundary conditions such as upstream basin pour points.

  • weights – A grid defining the value to accumulate from each cell. Default is a grid of 1s.

  • out_path – Defines a path to save the output raster.

  • **kwargs – keyword arguments, specific options depend on the engine being used.

Returns:

The output Flow Accumulation Cells (FAC) raster.

accumulate_parameter(d8_fdr: xarray.DataArray | str | Path, parameter_raster: xarray.DataArray | str | Path, engine: SupportsAccumulateParameter = 'pysheds', upstream_pour_points: PourPointValuesDict | None = None, out_path: str | Path | None = None, **kwargs) xarray.DataArray[source]

Create a parameter accumulation raster from a D8 FDR and a parameter raster.

A key aspect of this function is that the output DataArray will have dimensions matching param:parameter_raster.

Parameters:
  • d8_fdr – A D8 Flow Direction Raster (dtype=Int).

  • parameter_raster – A parameter raster aligned via tools.align_raster() with the us_fdr. This can be multi-dimensional (i.e. f(x, y, t)), and if so, a multi-dimensional output is returned.

  • engine – A terrain engine class that supports parameter accumulation.

  • upstream_pour_points – A list of lists each with with coordinate tuples as the first item [0], and updated cell values as the second [1]. This allows the FAC to be made with boundary conditions such as upstream basin pour points.

  • out_path – Defines a path to save the output raster.

  • **kwargs – keyword arguments, specific options depend on the engine being used.

Returns:

The output parameter accumulation raster.

adjust_parameter_raster(parameter_raster: xarray.DataArray | str | Path, d8_fdr: xarray.DataArray | str | Path, upstream_pour_points: PourPointValuesDict, out_path: str | Path | None = None) xarray.DataArray[source]

Adds values to a parameter raster’s at specific coordinates / pour points.

The main utility of this function is to enable cascading accumulation values from one basin or raster to another via accumulate_parameter().

Parameters:
  • parameter_raster – Input parameter raster to update.

  • d8_fdr – a D8 Flow Direction Raster.

  • upstream_pour_points – A dictionary with coordinates to update values at, and the values to add.

  • out_path – Defines a path to save the output raster.

Returns:

The updated parameter raster.

align_raster(in_raster: xarray.DataArray | str | Path, match_raster: xarray.DataArray | str | Path, resample_method: str = 'nearest', out_path: str | Path | None = None) xarray.DataArray[source]

Aligns the projection/CRS, spatial extent, and resolution of one raster to another.

Parameters:
  • in_raster – Input raster that needs to be aligned.

  • match_raster – Raster to align to.

  • resample_method – A valid resampling method from rasterio.enums.Resample (default=’nearest’). NOTE: Do not use any averaging resample methods when working with a categorical raster!

  • out_path – Defines a path to save the output raster.

Returns:

The output aligned raster.

binarize_categorical_raster(cat_raster: xarray.DataArray | str | Path, categories_dict: Dict[int, str] | None = None, ignore_categories: List | None = None, out_path: str | Path | None = None) xarray.DataArray[source]

Converts a single band categorical raster into a binary multi-band binary raster.

Each output band represent a unique category, where 1 encodes cells belonging the the category, and 0 encodes cells belonging to any other category. This function is used to prep a categorical raster for parameter_accumulate().

Parameters:
  • cat_raster – A categorical (dtype=int) raster with N unique categories (i.e., land cover classes).

  • categories_dict – A dictionary assigning string names (values) to integer raster values (keys).

  • ignore_categories – Category cell values not include in the output raster.

  • out_path – Defines a path to save the output raster.

Returns:

A N-band multi-dimensional raster as a xarray DataArray object.

binarize_nodata(in_raster: xarray.DataArray | str | Path, nodata_value: int | float | None = None, out_path: str | Path | None = None) xarray.DataArray[source]

Creates an output binary raster based on an input where nodata values -> 1, and valued cells -> 0.

Note: while param:inverse=True this can be used with pyfunc:apply_mask() to match nodata cells between rasters.

Parameters:
  • in_raster – Input raster.

  • nodata_value – If the nodata value for param:in_raster is not in the metadata, set this parameter to equal the cell value storing nodata (i.e., np.nan or -999).

  • out_path – Defines a path to save the output raster.

Returns:

The output binary mask raster.

check_function_kwargs(function: callable, engine: str) Dict[str, str | int | float][source]

Provides a dictionary of allowed kwargs keywords + input types for a function.

NOTE: This function will raise a ValueError if a non-terrain_engine

function is provided as the input.

Parameters:
  • function – A function belonging to a terrain_engine class.

  • engine – The name of the engine being used.

Returns:

A dictionary with allowed kwargs as keys, and allowed input types as values.

clip(in_raster: xarray.DataArray | str | Path, match_raster: xarray.DataArray | str | Path | None = None, match_shapefile: geopandas.GeoDataFrame | str | Path | None = None, custom_bbox: List | None = None, out_path: str | Path | None = None) xarray.DataArray[source]

Clips a raster to the rectangular extent (aka bounding box) of another raster (or shapefile).

Parameters:
  • in_raster – Input raster.

  • match_raster – If defined, in_raster is clipped to match the extent of match_raster.

  • match_shapefile – A shapefile that is used to define the output extent if match_raster == None.

  • out_path – Defines a path to save the output raster.

  • custom_bbox – A list with bounding box coordinates that define the output extent if match_raster == None. Note: Coordinates must be of the form [minX, minY, maxX, maxY]. Note: Using this parameter assumes that coordinates match the CRS of param:in_raster.

Returns:

The input raster clipped by the desired geometry.

convert_fdr_formats(d8_fdr: xarray.DataArray | str | Path, out_format: str, in_format: str | None = None, out_path: str | Path | None = None) xarray.DataArray[source]

Converts the D8 encoding of Flow Direction Rasters (FDR).

Parameters:
  • d8_fdr – The input D8 Flow Direction Raster (FDR).

  • out_format – A valid D8 flow direction format name in custom_types.D8ConversionDicts.keys().

  • in_format – A valid D8 flow direction format name in custom_types.D8ConversionDicts.keys() that overrides the auto-recognized format from param:d8_fdr. Note: manually inputting param:in_format will improve performance.

  • out_path – Defines a path to save the output raster.

Returns:

The re-encoded D8 Flow Direction Raster (FDR).

d8_to_dinfinity(d8_fdr: xarray.DataArray | str | Path, out_path: str | Path | None = None) xarray.DataArray[source]

Converts a D8 Flow Direction Raster to D-Infinity.

Parameters:
  • d8_fdr – A D8 Flow Direction Raster (dtype=int).

  • out_path – Defines a path to save the output raster.

Returns:

The output D-Inf Flow Direction Raster.

decay_accumulation(d8_fdr: xarray.DataArray | str | Path, decay_raster: xarray.DataArray | str | Path, engine: SupportsDecayAccumulation = 'taudem', upstream_pour_points: PourPointValuesDict | None = None, parameter_raster: xarray.DataArray | str | Path | None = None, out_path: str | Path | None = None, **kwargs) xarray.DataArray[source]

Creates a “decayed” D-Infinity based accumulation raster via a decay raster.

NOTE: Replaces tools.decayAccum() from V1 FCPGtools. This can be used to accumulate a parameter or just cells counts.

Parameters:
  • dinf_fdr – A flow direction raster in D-Infinity format. This input can be made with d8_to_dinfinity().

  • decay_raster – A decay ‘multiplier’ raster calculated from distance to stream via make_decay_raster().

  • engine – A terrain engine class that supports decayed accumulation.

  • upstream_pour_points – A list of lists each with with coordinate tuples as the first item [0], and updated cell values as the second [1]. This allows the FAC to be made with boundary conditions such as upstream basin pour points.

  • parameter_raster – A parameter raster aligned via align_raster() with the us_fdr. This can be multi-dimensional (i.e. f(x, y, t)), and if so, a multi-dimensional output is returned.

  • out_path – Defines a path to save the output raster.

  • **kwargs – keyword arguments, specific options depend on the engine being used.

Returns:

The output decayed accumulation raster.

distance_to_stream(d8_fdr: xarray.DataArray | str | Path, fac_raster: xarray.DataArray | str | Path, accum_threshold: int, engine: SupportsDistanceToStream = 'taudem', out_path: str | Path | None = None, **kwargs) xarray.DataArray[source]

Calculates cell distances from accumulation threshold defined streams.

NOTE: Replaces tools.dist2stream() from V1 FCPGtools.

Parameters:
  • d8_fdr – A D8 Flow Direction Raster (dtype=Int).

  • fac_raster – A Flow Accumulation Cell (FAC) raster output from accumulate_flow().

  • accum_threshold – The # of upstream/accumulated cells to consider a cell a stream.

  • engine – A terrain engine class that supports calculating distance to stream.

  • out_path – Defines a path to save the output raster.

  • **kwargs – keyword arguments, specific options depend on the engine being used.

Returns:

A raster with values of D8 flow distance from each cell to the nearest stream.

extreme_upslope_values(d8_fdr: xarray.DataArray | str | Path, parameter_raster: xarray.DataArray | str | Path, engine: SupportsExtremeUpslopeValues = 'taudem', mask_streams: xarray.DataArray | str | Path | None = None, out_path: str | Path | None = None, get_min_upslope: bool = False, **kwargs) xarray.DataArray[source]

Finds the max(default)/min value of a parameter grid upstream from each cell.

NOTE: Replaces tools.ExtremeUpslopeValue() from V1 FCPGtools.

Parameters:
  • d8_fdr – A flow direction raster .

  • parameter_raster – A parameter raster to find the max values from.

  • engine – A terrain engine class that supports finding extreme upslope values.

  • mask_streams – A stream mask raster from tools.mask_streams(). If provided, the output will be masked to only stream cells.

  • out_path – Defines a path to save the output raster.

  • get_min_upslope – If True, the minimum upslope value is assigned to each cell.

  • **kwargs – keyword arguments, specific options depend on the engine being used.

Returns:

A raster with max (or min) upstream value of the parameter grid as each cell’s value.

find_basin_pour_points(fac_raster: xarray.DataArray | str | Path, basins_shp: str, basin_id_field: str = 'HUC12', use_huc4: bool = True) PourPointLocationsDict[source]

Find pour points (aka outflow cells) in a FAC raster by basin using a shapefile.

Parameters:
  • fac_raster – A Flow Accumulation Cell raster (FAC).

  • basins_shp – A .shp shapefile containing basin geometries.

  • basin_id_field – Default behavior is for each GeoDataFrame row to be a unique basin. However, if one wants to use a higher level basin id that is shared across rows, this should be set to the column header storing the higher level basin id.

  • use_huc4 – Either ‘HUC4’ or ‘HUC12’.

Returns:

A dictionary with keys (i.e., basin IDs) storing coordinates as a tuple(x, y).

find_fac_pour_point(fac_raster: xarray.DataArray | str | Path, basin_name: str | int | None = None) PourPointLocationsDict[source]

Find pour points (aka outflow cells) in a FAC raster by basin using a shapefile.

Parameters:
  • fac_raster – A Flow Accumulation Cell raster (FAC).

  • basin_name – Allows a name to be given to the FAC.

Returns:

A dictionary with keys (i.e., basin IDs) storing coordinates as a tuple(x, y).

get_pour_point_values(pour_points_dict: PourPointLocationsDict, accumulation_raster: xarray.DataArray | str | Path) PourPointValuesDict[source]

Get the accumulation raster values from downstream pour points.

NOTE: This function is intended to feed into accumulate_flow() or parameter_accumulate() param:upstream_pour_points.

Parameters:
  • pour_points_dict – A dictionary of form custom_types.PourPointValuesDict.

  • accumulation_raster – A Flow Accumulation Cell raster (FAC) or a parameter accumulation raster.

Returns:

A list of tuples (one for each pour point) storing their coordinates [0]

and accumulation value [1].

load_raster(in_raster: xarray.DataArray | str | Path) xarray.DataArray[source]

Loads a raster into a xarray.DataArray object.

load_shapefile(in_shapefile: geopandas.GeoDataFrame | str | Path) geopandas.GeoDataFrame[source]

Loads a shapefile into a geopandas.GeoDataFrame

make_decay_raster(distance_to_stream_raster: xarray.DataArray | str | Path, decay_factor: int | float, out_path: str | Path | None = None) xarray.DataArray[source]

Creates a decay raster based on distance to stream.

This function is used to prep for decay_accumulate(). Grid cell values are computed as the inverse number of grid cells, np.exp((-1 * distance_to_stream * cell_size) / (cell_size ** k)), where k is a constant applied to the cell size values.

Parameters:
  • distance_to_stream_raster – A distance to stream raster output from distance_to_stream().

  • decay_factor – Dimensionless constant applied to decay factor denominator. NOTE: Set k to 2 for ‘moderate’ decay; greater than 2 for slower decay; or less than 2 for faster decay.

  • out_path – Defines a path to save the output raster.

Returns:

The output decay raster for use in decay_accumulate().

make_fac_weights(parameter_raster: xarray.DataArray | str | Path, fdr_raster: xarray.DataArray | str | Path, out_of_bounds_value: float | int, out_path: str | Path | None = None) xarray.DataArray[source]

Preps param:parameter_raster for parameter accumulation by matching the nodata boundary to param:fdr_raster.

NOTE: Only this function AFTER aligning the parameter raster to the FDR raster via tools.align_raster()!

Parameters:
  • parameter_raster – A parameter raster.

  • fdr_raster – A Flow Direction Raster (either D8 or D-inf).

  • out_of_bounds_value – The value to give param:parameter_raster cells outside the data boundary of param:fdr_raster. Note that this is automatically set within terrain_engine functions.

  • out_path – defines a path to save the output raster.

Returns:

The prepped parameter grid.

make_fcpg(param_accum_raster: xarray.DataArray | str | Path, fac_raster: xarray.DataArray | str | Path, out_path: str | Path | None = None) xarray.DataArray[source]

Creates a Flow Conditioned Parameter Grid raster by dividing a parameter accumulation raster by a Flow Accumulation Cell (FAC) raster.

Parameters:
  • param_accum_raster – (xr.DataArray or str raster path)

  • fac_raster – (xr.DataArray or str raster path) input FAC raster.

  • out_path – (str or pathlib.Path, default=None) defines a path to save the output raster.

Returns:

The output FCPG raster as a xarray DataArray object.

mask_streams(fac_raster: xarray.DataArray | str | Path, accumulation_threshold: int | float, out_path: str | Path | None = None) xarray.DataArray[source]

A simplified version of tools.value_mask() that outputs np.nan for non-‘stream’ cells below the accumulation threshold.

Parameters:
  • fac_raster – A single band flow accumulation (FAC) raster.

  • accumulation_threshold – The flow accumulation threshold.

Returns:

The output raster with cells below the threshold encoded as np.nan

reproject_raster(in_raster: xarray.DataArray | str | Path, out_crs: xarray.DataArray | str | Path | geopandas.GeoDataFrame | None = None, resolution: float | Tuple[float, float] | None = None, wkt_string: str | None = None, out_path: str | Path | None = None) xarray.DataArray[source]

Reprojects a raster to match another shapefile/raster’s Coordinate Reference System (CRS), or a custom CRS.

Parameters:
  • in_raster – Input raster.

  • out_crs – A raster or shapefile with the desired CRS to reproject to.

  • resolution – Allows the output resolution to be overridden.

  • wkt_string – Allows the user to define the output CRS using a custom valid WKT string.

  • out_path – Defines a path to save the output raster.

Returns:

The input raster reprojected to match the desired Coordinate Reference System (CRS).

reproject_shapefile(in_shapefile: geopandas.GeoDataFrame | str | Path, out_crs: xarray.DataArray | str | Path | geopandas.GeoDataFrame | None = None, wkt_string: str | None = None, out_path: str | Path | None = None) xarray.DataArray[source]

Reprojects a shapefile to match another shapefile/raster’s Coordinate Reference System (CRS), or a custom CRS.

Parameters:
  • in_shapefile – Input shapefile/GeoDataFrame.

  • out_crs – A raster or shapefile with the desired CRS to reproject to.

  • wkt_string – Allows the user to define the output CRS using a custom valid WKT string.

  • out_path – Defines a path to save the output shapefile.

Returns:

The input shapefile reprojected to match the desired Coordinate Reference System (CRS).

resample(in_raster: xarray.DataArray | str | Path, match_raster: xarray.DataArray | str | Path, method: str = 'nearest', out_path: str | Path | None = None) xarray.DataArray[source]

Resamples a raster to match another raster’s cell size.

Parameters:
  • in_raster – Input raster.

  • match_raster – A raster to match the resolution / cell size of.

  • method – A valid resampling method from rasterio.enums.Resample. NOTE: Do not use any averaging resample methods when working with a categorical raster!

  • out_path – Defines a path to save the output raster.

Returns:

The input raster resampled to the desired resolution / cell size.

save_raster(out_raster: xarray.DataArray, out_path: str | Path) None[source]

Saves an xarray.DataArray to a .tif raster file at location param:out_path

save_shapefile(out_shapefile: geopandas.GeoDataFrame, out_path: str | Path) None[source]

Saves an geopandas.GeoDataFrame to a .shp file at location param:out_path

spatial_mask(in_raster: xarray.DataArray | str | Path, mask_shp: geopandas.GeoDataFrame | str, inverse: bool = False, out_path: str | Path | None = None) xarray.DataArray[source]

Applies a spatial mask via a shapefile to a raster.

Primarily for masking rasters (i.e., FAC) by basin shapefiles, converting out-of-mask raster values to NoData. A cell value can also be used to create a mask for integer rasters. NOTE: default behavior (inverse=False) will make it so cells NOT COVERED by mask_shp -> NoData.

Parameters:
  • in_raster – Input raster.

  • mask_shp – Shapefile used for masking.

  • inverse – If True, cells that ARE COVERED by mask_shp -> NoData.

  • out_path – Defines a path to save the output raster.

Returns:

The output spatially masked raster.

value_mask(in_raster: xarray.DataArray | str | Path, thresh: int | float | None = None, greater_than: bool = True, equals: int | None = None, inverse_equals: bool = False, in_mask_value: int | None = None, out_mask_value: int | None = None, out_path: str | Path | None = None) xarray.DataArray[source]

“Mask a raster via a value threshold.

Primary use case is to identify high accumulation zones / stream cells. Cells included in the mask are given a value of 1, all other cells are given a value of 0 (unless out_mask_value!=None). NOTE: this function generalizes V1:pyfunc:makeStreams() functionality.

Parameters:
  • in_raster – Input raster.

  • thresh – The threshold to apply the value mask with.

  • greater_than – If False, only values less than param:thresh are included in the mask.

  • equals – Only cells matching the value of param:equals are included in the mask.

  • inverse_equals – Is True and param:equals==True, values NOT equal to :param:thresh are masked out.

  • in_mask_value – Allows included cells to be given a non-zero integer value.

  • out_mask_value – Allows non-included cells to be given a non-zero integer value.

  • out_path – Defines a path to save the output raster.

Returns:

out_mask_value.

Return type:

The output raster with all masked out values == nodata or param