NAME
r.stream.extract - Stream network extraction
KEYWORDS
raster
SYNOPSIS
r.stream.extract
r.stream.extract help
r.stream.extract elevation=name [accumulation=name] [depression=name] threshold=float [d8cut=float] [mexp=float] [stream_length=integer] [stream_rast=name] [stream_vect=name] [direction=name] [--overwrite] [--verbose] [--quiet]
Flags:
- --overwrite
- Allow output files to overwrite existing files
- --verbose
- Verbose module output
- --quiet
- Quiet module output
Parameters:
- elevation=name
- Elevation map
- Elevation on which entire analysis is based
- accumulation=name
- Accumulation map
- Stream extraction will use provided accumulation instead of calculating it anew
- depression=name
- Map with real depressions
- Streams will not be routed out of real depressions
- threshold=float
- Minimum flow accumulation for streams
- Must be > 0
- d8cut=float
- Use SFD above this threshold
- If accumulation is larger than d8cut, SFD is used instead of MFD. Applies only if no accumulation map is given.
- mexp=float
- Montgomery exponent for slope, disabled with 0
- Montgomery: accumulation is multiplied with pow(slope,mexp) and then compared with threshold.
- Default: 0
- stream_length=integer
- Delete stream segments shorter than stream_length cells.
- Applies only to first-order stream segments (springs/stream heads).
- Default: 0
- stream_rast=name
- Output raster map with unique stream ids
- stream_vect=name
- Output vector with unique stream ids
- direction=name
- Output raster map with flow direction
DESCRIPTION
r.stream.extract extracts streams in both raster and vector
format from a required input elevation map and optional input
accumulation map.
OPTIONS
- elevation
- Input map, required: Elevation on which entire analysis is based.
NULL (nodata) cells are ignored, zero and negative values are valid
elevation data. Gaps in the elevation map that are located within the
area of interest must be filled beforehand, e.g. with
r.fillnulls, to avoid distortions.
- accumulation
- Input map, optional: Accumulation values of the provided
accumulation map are used and not calculated from the input
elevation map. If accumulation is given,
elevation must be exactly the same map used to calculate
accumulation. If accumulation was calculated with
r.terraflow, the filled elevation output
of r.terraflow must be used. Further on, the current region should be
aligned to the accumulation map. Flow direction is
first calculated from elevation and then adjusted to
accumulation. It is not necessary to provide accumulation
as the number of cells, it can also be the optionally adjusted or
weighed total contributing area in square meters or any other unit.
When an original flow accumulation map is adjusted or weighed, the
adjustment or weighing should not convert valid accumulation values to
NULL (nodata) values.
- depression
- Input map, optional: All non-NULL and non-zero cells will be regarded
as real depressions. Streams will not be routed out of depressions. If an
area is marked as depression but the elevation model has no depression
at this location, streams will not stop there. If a flow accumulation map
and a map with real depressions are provided, the flow accumulation map
must match the depression map such that flow is not distributed out of
the indicated depressions. It is recommended to use internally computed
flow accumulation if a depression map is provided.
- threshold
- Required: threshold for stream initiation by overland flow:
the minumum (optionally modifed) flow accumulation value that will initiate
a new stream. If Montgomery's method for channel initiation is used, the
cell value of the accumulation input map is multiplied by
(tan(local slope))mexp and then compared to threshold.
- d8cut
- Minimum amount of overland flow (accumulation) when SFD (D8) will be
used instead of MFD (FD8) to calculate flow accumulation. Only applies
if no accumulation map is provided. Setting to 0 disables MFD completely.
- mexp
- Use the method of Montgomery and Foufoula-Georgiou (1993) to
initiate a stream with exponent mexp. The cell value of the
accumulation input map is multiplied by (tan(local slope))mexp
and then compared to threshold. If threshold is reached or
exceeded, a new stream is initiated. The default value 0 disables
Montgomery. Montgomery and Foufoula-Georgiou (1993) generally recommend
to use 2.0 as exponent. mexp values closer to 0 will produce
streams more similar to streams extracted with Montgomery disabled.
Larger mexp values decrease the number of streams in flat areas
and increase the number of streams in steep areas. If weight is
given, the weight is applied first.
- stream_length
- Minimum stream length in number of cells for first-order (head/spring)
stream segments. All first-order stream segments shorter than
stream_length will be deleted.
- stream_rast
- Output raster map with extracted streams. Cell values encode unique
ID for each stream segment.
- stream_vect
- Output vector map with extracted stream segments and points. Points
are written at the start location of each stream segment and at the
outlet of a stream network. In layer 1, categories are unique IDs,
identical to the cell value of the raster output. The attribute table
for layer 1 holds information about the type of stream segment: start
segment, or intermediate segment with tributaries. Columns are cat int,
stream_type varchar(), type_code int. The encoding for type_code is 0 =
start, 1 = intermediate. In layer 2, categories are identical to
type_code in layer 1 with additional category 2 = outlet for outlet
points. Points with category 1 = intermediate in layer 2 are at the
location of confluences.
- direction
- Output raster map with flow direction for all non-NULL cells in
input elevation. Flow direction is of D8 type with a range of 1 to 8.
Multiplying values with 45 gives degrees CCW from East. Flow direction
was adjusted during thinning, taking shortcuts and skipping cells that
were eliminated by the thinning procedure.
NOTES
Stream extraction
If no accumulation input map is provided, flow accumulation is
determined with a hydrological anaylsis similar to
r.watershed. The algorithm is
MFD (FD8) after Holmgren 1994, as for
r.watershed. The threshold
option determines the number of streams and detail of stream networks.
Whenever flow accumulation reaches threshold, a new stream is
started and traced downstream to its outlet point. As for
r.watershed, flow accumulation is
calculated as the number of cells draining through a cell.
Weighed flow accumulation
Flow accumulation can be calculated first, e.g. with
r.watershed, and then modified before
using it as input for r.stream.extract. In its general form, a
weighed accumulation map is generated by first creating a weighing map
and then multiplying the accumulation map with the weighing map using
r.mapcalc. It is highly recommended to
evaluate the weighed flow accumulation map first, before using it as
input for r.stream.extract.
This allows e.g. to decrease the number of streams in dry areas and
increase the number of streams in wet areas by setting weight
to smaller than 1 in dry areas and larger than 1 in wet areas.
Another possibility is to restrict channel initiation to valleys
determined from terrain morphology. Valleys can be determined with
r.param.scale param=crosc
(cross-sectional or tangential curvature). Curvature values < 0
indicate concave features, i.e. valleys. The size of the processing
window determines whether narrow or broad valleys will be identified
(See example below).
Defining a region of interest
The stream extraction procedure can be restricted to a certain region of
interest, e.g. a subbasin, by setting the computational region with
g.region and/or creating a MASK. Such region of interest should
be a complete catchment area, complete in the sense that the complete
area upstream of an outlet point is included and buffered with at least
one cell.
Stream output
The stream_rast output raster and vector contains stream
segments with unique IDs. Note that these IDs are different from the IDs
assigned by r.watershed. The vector
output also contains points at the location of the start of a stream
segment, at confluences and at stream network outlet locations.
EXAMPLE
This example is based on the elevation map elevation.10m in the
sample dataset spearfish60 and uses valleys determined with
r.param.scale to weigh an accumulation
map produced with r.watershed.
# set region
g.region -p rast=elevation.10m@PERMANENT
# calculate flow accumulation
r.watershed ele=elevation.10m@PERMANENT acc=elevation.10m.acc -f
# curvature to get narrow valleys
r.param.scale input="elevation.10m@PERMANENT" output="tangential_curv_5" size=5 param=crosc
# curvature to get a bit broader valleys
r.param.scale input="elevation.10m@PERMANENT" output="tangential_curv_7" size=7 param=crosc
# curvature to get broad valleys
r.param.scale input="elevation.10m@PERMANENT" output="tangential_curv_11" size=11 param=crosc
# create weight map
r.mapcalc "weight = if(tangential_curv_5 < 0, -100 * tangential_curv_5, \
if(tangential_curv_7 < 0, -100 * tangential_curv_7, \
if(tangential_curv_11 < 0, -100 * tangential_curv_11, 0.000001)))"
# weigh accumulation map
r.mapcalc "elevation.10m.acc.weighed = elevation.10m.acc * weight"
# copy color table from original accumulation map
r.colors map=elevation.10m.acc.weighed raster=elevation.10m.acc
Display both the original and the weighed accumulation map.
Compare them and proceed if the weighed accumulation map makes sense.
# extract streams
r.stream.extract elevation=elevation.10m@PERMANENT \
accumulation=elevation.10m.acc.weighed \
threshold=1000 \
stream_rast=elevation.10m.streams
# extract streams using the original accumulation map
r.stream.extract elevation=elevation.10m@PERMANENT \
accumulation=elevation.10m.acc \
threshold=1000 \
stream_rast=elevation.10m.streams.noweight
Now display both stream maps and decide which one is more realistic.
SEE ALSO
r.watershed,
r.terraflow,
r.param.scale,
r.mapcalc,
r.thin,
r.to.vect
REFERENCES
Ehlschlaeger, C. (1989). Using the AT Search Algorithm
to Develop Hydrologic Models from Digital Elevation Data,
Proceedings of International Geographic Information Systems (IGIS)
Symposium '89, pp 275-281 (Baltimore, MD, 18-19 March 1989).
URL:
http://faculty.wiu.edu/CR-Ehlschlaeger2/older/IGIS/paper.html
Holmgren, P. (1994). Multiple flow direction algorithms for runoff
modelling in grid based elevation models: An empirical evaluation.
Hydrological Processes Vol 8(4), pp 327-334.
DOI: 10.1002/hyp.3360080405
Montgomery, D.R., Foufoula-Georgiou, E. (1993). Channel network source
representation using digital elevation models.
Water Resources Research Vol 29(12), pp 3925-3934.
AUTHOR
Markus Metz
Last changed: $Date$
Main index - raster index - Full index
© 2003-2016 GRASS Development Team