fix_flowdir: Fix flow direction

View source: R/get_geometry.R

fix_flowdirR Documentation

Fix flow direction


If flowlines aren't digitized in the expected direction, this will reorder the nodes so they are.


fix_flowdir(comid, network = NULL, fn_list = NULL)



integer The COMID of the flowline to check


sf data.frame The entire network to check from. Requires a "toCOMID" field.


list containing named elements 'flowline', 'network', and 'check_end', where 'flowline' is the flowline to be checked and 'network' the feature up or downstream of the flowline to be checked, and 'check_end' is '"start"' or '"end"' depending if the 'network' input is upstream ('"start"') or downstream ('"end"') of the flowline to be checked. This option allows pre-compilation of pairs of features which may be useful for very large numbers of flow direction checks.


a geometry for the feature that has been reversed if needed.


source(system.file("extdata/sample_data.R", package = "nhdplusTools"))

fline <- sf::read_sf(sample_data, "NHDFlowline_Network")

# We add a tocomid with prepare_nhdplus
fline <- sf::st_sf(prepare_nhdplus(fline, 0, 0, 0, FALSE),
                   geom = sf::st_zm(sf::st_geometry(fline)))

# Look at the end node of the 10th line.
(n1 <- get_node(fline[10, ], position = "end"))

# Break the geometry by reversing it.
sf::st_geometry(fline)[10] <- sf::st_reverse(sf::st_geometry(fline)[10])

# Note that the end node is different now.
(n2 <- get_node(fline[10, ], position = "end"))

# Pass the broken geometry to fix_flowdir with the network for toCOMID
sf::st_geometry(fline)[10] <- fix_flowdir(fline$COMID[10], fline)

# Note that the geometry is now in the right order.
(n3 <- get_node(fline[10, ], position = "end"))

plot(n1, add = TRUE)
plot(n2, add = TRUE, col = "blue")
plot(n3, add = TRUE, cex = 2, col = "red")

nhdplusTools documentation built on Dec. 7, 2022, 5:15 p.m.