This function takes an `sf`

representing routes over geographical space
and a raster dataset representing the terrain as inputs.
It returns the average gradient of each route feature.

slope_raster(
routes,
dem,
lonlat = sf::st_is_longlat(routes),
method = "bilinear",
fun = slope_matrix_weighted,
terra = has_terra() && methods::is(dem, "SpatRaster"),
directed = FALSE
)

## Arguments

routes |
Routes, the gradients of which are to be calculated.
The object must be of class `sf` or `sfc` with `LINESTRING` geometries. |

dem |
Raster overlapping with `routes` and values representing elevations |

lonlat |
Are the routes provided in longitude/latitude coordinates?
By default, value is from the CRS of the routes (`sf::st_is_longlat(routes)` ). |

method |
The method of estimating elevation at points,
passed to the `extract` function for extracting values from raster
datasets. Default: `"bilinear"` . |

fun |
The slope function to calculate per route,
`slope_matrix_weighted` by default. |

terra |
Should the `terra` package be used?
`TRUE` by default if the package is installed *and*
if `dem` is of class `SpatRast` |

directed |
Should the value be directed? `FALSE` by default.
If `TRUE` the result will be negative when it represents a downslope
(when the end point is lower than the start point). |

## Value

A vector of slopes equal in length to the number simple features
(rows representing linestrings) in the input object.

## Details

If calculating slopes associated with OSM data, the results may be better
if the network is first split-up, e.g. using the function
`stplanr::rnet_breakup_vertices()`

from the
`stplanr`

package.
**Note:** The `routes`

object must have a geometry type of `LINESTRING`

.
The `sf::st_cast()`

function can convert from `MULTILINESTRING`

(and other)
geometries to `LINESTRING`

s as follows:
`r_linestring = sf::st_cast(routes, "LINESTRING")`

.

## Examples

#> 1 2 3
#> 0.003074005 0.010870459 0.004998315

#> [1] 0.9975107

slope_raster(routes, dem, directed = TRUE)

#> 1 2 3
#> 0.003074005 -0.010870459 0.004998315

#> 1 2 3
#> -0.003074005 0.010870459 -0.004998315