Nothing
#' Calculate binary IDs for each stream network.
#'
#' Calculate binary IDs for each stream network built up by '0' and '1'.
#' This function is called by \code{\link{export_ssn}} and there is no need for it
#' be called by the users.
#'
#' @import data.table
#'
#' @return A list with one slot for each network id containing a data frame
#' with 'rid' and 'binaryID' for each segment belonging to this network.
#'
#' @note \code{\link{import_data}}, \code{\link{derive_streams}},
#' \code{\link{calc_edges}} and \code{\link{calc_sites}} must be run before.
#'
#' @author Eduard Szoecs, \email{eduardszoecs@@gmail.com}; Mira Kattwinkel, \email{mira.kattwinkel@@gmx.net}
#' @export
#'
#' @examples
#' \donttest{
#' # Initiate and setup GRASS
#' dem_path <- system.file("extdata", "nc", "elev_ned_30m.tif", package = "openSTARS")
#' if(.Platform$OS.type == "windows"){
#' grass_program_path = "c:/Program Files/GRASS GIS 7.6"
#' } else {
#' grass_program_path = "/usr/lib/grass78/"
#' }
#'
#' setup_grass_environment(dem = dem_path,
#' gisBase = grass_program_path,
#' remove_GISRC = TRUE,
#' override = TRUE
#' )
#' gmeta()
#'
#' # Load files into GRASS
#' dem_path <- system.file("extdata", "nc", "elev_ned_30m.tif", package = "openSTARS")
#' sites_path <- system.file("extdata", "nc", "sites_nc.shp", package = "openSTARS")
#' streams_path <- system.file("extdata", "nc", "streams.shp", package = "openSTARS")
#' preds_v_path <- system.file("extdata", "nc", "pointsources.shp", package = "openSTARS")
#' preds_r_path <- system.file("extdata", "nc", "landuse_r.tif", package = "openSTARS")
#'
#' import_data(dem = dem_path, sites = sites_path, streams = streams_path,
#' predictor_vector = preds_v_path, predictor_raster = preds_r_path)
#'
#' # Derive streams from DEM
#' derive_streams(burn = 0, accum_threshold = 700, condition = TRUE, clean = TRUE)
#'
#' # Check and correct complex confluences (there are no complex confluences in this
#' # example date set; set accum_threshold in derive_streams to a smaller value
#' # to create complex confluences)
#' cj <- check_compl_confluences()
#' if(cj){
#' correct_compl_confluences()
#' }
#'
#' # Prepare edges
#' calc_edges()
#'
#' # Prepare site
#' calc_sites()
#'
#' binaries <- calc_binary()
#' head(binaries[[1]])
#' }
calc_binary <- function(){
vect <- execGRASS("g.list",
parameters = list(
type = 'vect'
),
intern = TRUE)
if (!'sites_o' %in% vect)
stop('Sites not found. Did you run import_data()?')
if (!'edges' %in% vect)
stop('edges not found. Did you run calc_edges()?')
if (!'sites' %in% vect)
stop('sites not found. Did you run calc_sites()?')
dt.streams<-execGRASS('db.select',
flags = 'c',
parameters = list(
sql = 'select rid,stream,next_str,prev_str01,prev_str02,netID from edges',
separator = ','
),
ignore.stderr = TRUE,
intern = TRUE)
dt.streams<-do.call(rbind,strsplit(dt.streams,split=","))
dt.streams<-apply(dt.streams,2,as.numeric)
colnames(dt.streams)<-c("rid","stream","next_str","prev_str01","prev_str02","netID")
dt.streams <- data.frame(dt.streams)
setDT(dt.streams)
dt.streams[, binaryID := "0"]
outlets <- dt.streams[next_str == -1, stream]
for(i in outlets){
assign_binIDs(dt = dt.streams, id=i, 1, NULL)
}
bins<-lapply(outlets, function(x) dt.streams[netID == dt.streams[stream == x, netID], list(rid,binaryID)])
names(bins)<- dt.streams[stream %in% outlets, netID]
return(bins)
}
#' assign_binIDs
#' Recursive function to assign binary id to stream segments
#'
#' Should be run for all outlets in the network ( = most downstream segments) and fills the binID for all segments
#' @param id: stream segment
#' @param binID: binary ID
#' @param lastbit: last char to be added (0 or 1)
#' @keywords internal
#'
assign_binIDs <- function(dt, id, binID, lastbit){
if(dt[stream == id, prev_str01 ] == 0){ # check only one of prev01 and prev02 because they are always both 0
dt[stream == id, binaryID := paste0(binID, lastbit)]
} else {
dt[stream == id, binaryID := paste0(binID,lastbit)]
assign_binIDs(dt, dt[stream == id, prev_str01], dt[stream == id, binaryID], 0)
assign_binIDs(dt, dt[stream == id, prev_str02], dt[stream == id, binaryID], 1)
}
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.