For a more detailed analysis of an urban river corridor, corridor-level delineation may not be sufficient. The corridor needs to be subdivided into smaller morphological units. Segmentation is a process of subdividing the corridor by using major transversal road or rail infrastructure lines.
By default, the all-in-one function delineate()
only
returns the corridor boundary. The corridor can be segmented either by
setting the argument segments = TRUE
in
delineate()
or by using the
delineate_segments()
function in a separate step.
To demonstrate this as a separate step, we will use the
bucharest_delineation$corridor
from the package data, as
well as bucharest_osm$streets
and
bucharest_osm$railways
from the CRiSpData
package as input.
We first prepare the network and select all the streets and railways
that cover the river corridor plus a small buffer region (see also
vignette("network-preparation")
):
# Add a buffer region around the corridor
corridor_buffer <- sf::st_buffer(bucharest_delineation$corridor, 500)
# Filter the streets and railwayas to the buffer area
streets <- bucharest_osm$streets |>
sf::st_filter(corridor_buffer, .predicate = sf::st_covered_by)
railways <- bucharest_osm$railways |>
sf::st_filter(corridor_buffer, .predicate = sf::st_covered_by)
# Build combined street and railway network
network_filtered <- rbind(streets, railways) |>
as_network()
We then delineate segments in the corridor. The algorithm spits the corridor using river-crossing transversal edges that form continuous lines in the network:
segmented_corridor <- delineate_segments(bucharest_delineation$corridor,
network_filtered,
bucharest_osm$river_centerline)
#> Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.4.0; sf_use_s2() is TRUE
plot(streets$geometry)
plot(segmented_corridor, border = "orange", lwd = 3, add = TRUE)