Applies a topological sort and calculates stream level. Algorithm: Terminal level paths are assigned level 1 (see note 1). Paths that terminate at a level 1 are assigned level 2. This pattern is repeated until no paths remain.
If a TRUE/FALSE coastal attribute is included, coastal terminal paths begin at 1 and internal terminal paths begin at 4 as is implemented by the NHD stream leveling rules.
Usage
add_streamlevel(x, coastal = NULL)
# S3 method for class 'data.frame'
add_streamlevel(x, coastal = NULL)
# S3 method for class 'hy'
add_streamlevel(x, coastal = NULL)
Arguments
- x
data.frame network compatible with hydroloom_names.
- coastal
character attribute name containing a logical flag indicating if a given terminal catchment flows to the coast of is an inland sink. If no coastal flag is included, all terminal paths are assumed to be coastal.
Examples
x <- sf::read_sf(system.file("extdata/new_hope.gpkg", package = "hydroloom"))
x <- add_toids(x)
y <- add_streamlevel(x)
#> Warning: Outlets don't follow hydroloom convention of 0 or '', not fixing.
#> Warning: no outlet found -- will start from outlets that go no where.
plot(sf::st_geometry(y), lwd = y$streamlevel, col = "blue")
#> Warning: Unknown or uninitialised column: `streamlevel`.
#> Warning: 'x' is NULL so the result will be NULL
x$coastal <- rep(FALSE, nrow(x))
y <- add_streamlevel(x, coastal = "coastal")
#> Warning: Outlets don't follow hydroloom convention of 0 or '', not fixing.
#> Warning: no outlet found -- will start from outlets that go no where.
unique(y$streamlevel)
#> Warning: Unknown or uninitialised column: `streamlevel`.
#> NULL
x$coastal[!x$Hydroseq == min(x$Hydroseq)] <- TRUE
y <- add_streamlevel(x)
#> Warning: Outlets don't follow hydroloom convention of 0 or '', not fixing.
#> Warning: no outlet found -- will start from outlets that go no where.
unique(y$streamlevel)
#> Warning: Unknown or uninitialised column: `streamlevel`.
#> NULL