Derive Continuous Flow (Spatial Analyst)

Available with Spatial Analyst license.

Summary

Generates a raster of accumulated flow into each cell from an input surface raster with no prior sink or depression filling required.

Learn more about how Derive Continuous Flow works

Usage

  • The input surface raster can be a digital elevation model (DEM) with no prior sink filling or a hydroconditioned DEM. The tool is not sensitive to errors in the surface raster that can act as depressions or sinks where flow terminates; filling sinks or depressions is not necessary.

  • Flow direction and flow accumulation are derived on a cell-by-cell basis by optimally traversing the input surface raster by following the direction of the minimum upslope neighbor (Metz et al., 2011; Ehlschlaeger, 1989).

  • The Output flow accumulation raster (out_accumulation_raster in Python) value is the primary output. This is a raster representing the accumulated flow at each cell as determined by accumulating the weight for all cells that flow into each cell. The current processing cell is not considered in this accumulation.

  • You can save flow direction raster output by specifying the Output flow direction raster (out_flow_direction_raster in Python) value. This raster represents the direction of flow.

  • An Input accumulation weight raster (in_weight_raster in Python) value can be specified to apply a weight to each cell when deriving flow accumulation.

  • When the input surface raster contains real depressions within the surface raster, the depressions must be specified in Input raster or feature depressions data (in_depressions_data in Python) to be considered cells where water can flow into but not outward (an outlet). Depression area information can be either a raster or a feature class. The feature class can be a point, polyline, or polygon.

  • The Derive Continuous Flow tool supports the D8 and multiple flow direction (MFD) flow direction modeling algorithms.

    • When the D8 option is specified for Flow direction type (flow_direction_type in Python), flow can take a single direction, which is toward the steepest drop. The steepest drop is calculated by taking the difference in z-value divided by the path length between cell centers (1 for cardinal cells and the square root of 2 for diagonal cells) (Jenson and Domingue, 1988) . The output raster takes only integer values from 1 to 255. The values from the center of each direction are specified in the following diagram:

      Flow Direction values

      If a cell has the same change in z-value in multiple directions, the D8 flow direction is undefined. In this case, the value for such cell in the output flow direction raster will be the sum of the possible directions.

    • When the MFD option is specified for Flow direction type, flow is partitioned across all downslope neighbors. Flow partition across neighboring cells (as a fraction) is estimated as a function of maximum slope gradient, which considers local terrain conditions (Qin et al., 2007). The output flow direction raster takes only integer values showing the predominant flow direction (toward the cell that receives the largest fraction of flow according to the partition scheme) for ease of interpretation. However, the Output flow accumulation raster parameter value reflects the flow partition scheme.

  • With the Force all edge cells to flow outward parameter unchecked (force_flow = "NORMAL" in Python), the default setting, a cell at the edge of the surface raster will flow toward the inner cell with the steepest drop in z-value. If the drop is less than or equal to zero, the cell will flow out of the surface raster.

  • NoData cells are considered noise and by definition do not have an associated value. The tool will ignore these cells when identifying the direction of the least steep uphill neighbor, as well as in the determination of flow direction and accumulation.

  • See Analysis environments and Spatial Analyst for additional details on the geoprocessing environments that apply to this tool.

  • References:

    Ehlschlaeger, C. R. 1989. "Using the AT Search Algorithm to Develop Hydrologic Models from Digital Elevation Data." International Geographic Information Systems (IGIS) Symposium 89: 275-281.

    Jenson, S. K., and Domingue, J. O. 1988. "Extracting Topographic Structure from Digital Elevation Data for Geographic Information System Analysis." Photogrammetric Engineering and Remote Sensing 54 (11): 1593–1600.

    Metz, M., Mitasova, H., & Harmon, R. S. 2011. "Efficient extraction of drainage networks from massive, radar-based elevation models with least cost path search." Hydrology and Earth System Sciences 15(2): 667-678.

    Qin, C., Zhu, A. X., Pei, T., Li, B., Zhou, C., & Yang, L. 2007. "An adaptive approach to selecting a flow partition exponent for a multiple flow direction algorithm." International Journal of Geographical Information Science 21(4): 443-458.

Parameters

LabelExplanationData Type
Input surface raster

The input raster representing a continuous surface.

Raster Layer
Input raster or feature depressions data
(Optional)

An optional dataset that defines real depressions.

The depressions can be defined either through a raster or a feature layer.

If input is a raster, the depression cells must take a valid value, including zero, and the areas that are not depressions must be NoData.

Composite Geodataset
Input accumulation weight raster
(Optional)

An optional input raster dataset that defines the fraction of flow that contributes to flow accumulation at each cell.

The weight is only applied to the accumulation of flow.

If no accumulation weight raster is specified, a default weight of 1 will be applied to each cell.

Raster Layer
Output flow direction raster
(Optional)

The output raster that shows the direction of flow at each cell using the D8 or Multiple Flow Direction (MFD) method.

The output is of integer type.

Raster Dataset
Flow direction type
(Optional)

Specifies the type of flow method that will be used when computing flow directions.

  • D8Flow direction will be determined by the D8 method. This method assigns flow direction to the steepest downslope neighbor. This is the default.
  • MFDFlow direction will be based on the MFD flow method. Flow direction will be partitioned across downslope neighbors according to an adaptive partition exponent.
String
Force all edge cells to flow outward
(Optional)

Specifies whether edge cells will always flow outward or follow normal flow rules.

  • Unchecked—If the maximum drop on the inside of an edge cell is greater than zero, the flow direction will be determined as usual; otherwise, the flow direction will be toward the edge. Cells that should flow from the edge of the surface raster inward will do so. This is the default.
  • Checked—All cells at the edge of the surface raster will flow outward from the surface raster.
Boolean

Return Value

LabelExplanationData Type
Output flow accumulation raster

The output raster representing flow accumulation (number of upstream cells draining to each cell).

The output raster is of floating-point type.

Raster

DeriveContinuousFlow(in_surface_raster, {in_depressions_data}, {in_weight_raster}, {out_flow_direction_raster}, {flow_direction_type}, {force_flow})
NameExplanationData Type
in_surface_raster

The input raster representing a continuous surface.

Raster Layer
in_depressions_data
(Optional)

An optional dataset that defines real depressions.

The depressions can be defined either through a raster or a feature layer.

If input is a raster, the depression cells must take a valid value, including zero, and the areas that are not depressions must be NoData.

Composite Geodataset
in_weight_raster
(Optional)

An optional input raster dataset that defines the fraction of flow that contributes to flow accumulation at each cell.

The weight is only applied to the accumulation of flow.

If no accumulation weight raster is specified, a default weight of 1 will be applied to each cell.

Raster Layer
out_flow_direction_raster
(Optional)

The output raster that shows the direction of flow at each cell using the D8 or Multiple Flow Direction (MFD) method.

The output is of integer type.

Raster Dataset
flow_direction_type
(Optional)

Specifies the type of flow method that will be used when computing flow directions.

  • D8Flow direction will be determined by the D8 method. This method assigns flow direction to the steepest downslope neighbor. This is the default.
  • MFDFlow direction will be based on the MFD flow method. Flow direction will be partitioned across downslope neighbors according to an adaptive partition exponent.
String
force_flow
(Optional)

Specifies whether edge cells will always flow outward or follow normal flow rules.

  • NORMALIf the maximum drop on the inside of an edge cell is greater than zero, the flow direction will be determined as usual; otherwise, the flow direction will be toward the edge. Cells that should flow from the edge of the surface raster inward will do so. This is the default.
  • FORCEAll cells at the edge of the surface raster will flow outward from the surface raster.
Boolean

Return Value

NameExplanationData Type
out_accumulation_raster

The output raster representing flow accumulation (number of upstream cells draining to each cell).

The output raster is of floating-point type.

Raster

Code sample

DeriveContinuousFlow example 1 (Python window)

This example creates a flow accumulation raster from an input surface raster.

from arcpy.sa import *
out_derivecontinuousflow_raster = DeriveContinuousFlow("surface.tif", "", "",
                                 "", "", "")
out_derivecontinuousflow_raster.save("C:/arcpyExamples/outputs/out_facc.tif")
DeriveContinuousFlow example 2 (Stand-alone window)

This example creates a flow accumulation raster from an input surface raster considering real depressions.

# Name: DeriveContinuousFlow_standalone.py
# Description: Generates a flow accumulation raster considering real depressions
#              specified through a raster dataset.
# Requirements: Spatial Analyst Extension

# Import system modules
import arcpy
from arcpy.sa import *

# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")

# Set the analysis environments
arcpy.env.workspace = "C:/arcpyExamples/data"

# Set the local variables
in_surface_raster = "surface.tif"
in_depressions_data = "depressions.tif"

# Execute DeriveContinuousFlow
out_derivecontinuousflow_raster = DeriveContinuousFlow(in_surface_raster, in_depressions_data,
                                 "", "", "", "")

# Save the output
out_derivecontinuousflow_raster.save("C:/arcpyExamples/outputs/out_facc.tif")

Licensing information

  • Basic: Requires Spatial Analyst
  • Standard: Requires Spatial Analyst
  • Advanced: Requires Spatial Analyst

Related topics