#' Zones exploitables
#'
#' @description Affichage des zones exploitables (pente<0.30) par tracteur sur le MNT
#'
#' @return La fonction renvoit le MNT
#'
#' @param shp = la route au format sf
#' @param r = raster correspondant à un MNT.
#' @param amont = distance selon la pente exploitable en amont. Par défaut amont = 50m.
#' @param aval = distance selon la pente exploitable en aval. Par défaut aval = 150m.
#' @param pas = résolution. Par défaut pas = 25m
#' @param conc = indice relatif de concavité. Plus cet indice est faible plus le contour sera découpé.
#' @param plane = valeur de pente en dessous de laquelle la pente est considérée comme plane.
#'
#' @import sf
#' @import tidyverse
#' @import raster
#' @import sp
#'
#' @author Max Bruciamacchie
#'
#' @export
#'
ExploiTracteur <- function(shp, r, amont=50, aval=150, pas=50, conc=1.8, plane=0.3){
# --------- TESTS --------
if(!inherits(shp, "sf") & !(st_geometry_type(st_union(shp)) %in% c("LINESTRING", "MULTILINESTRING"))) {
stop(cat("la fonction nécessite en entrée un objet sf de type LINESTRING."))
}
if(class(r) != "RasterLayer") {
stop(cat("la fonction nécessite en entrée un objet de type rasterLayer"))
}
zone <- st_buffer(shp, dist=300)
r <- crop(r, as(zone, "Spatial"))
pente <- terrain(r, opt="slope", unit="tangent", neighbors=8)
pente[pente > plane] <- NA
pente[pente <= plane] <- 1
desserte <- shp %>%
st_buffer(dist=10) %>%
st_union()
plat <- st_as_sf(stars::st_as_stars(pente), as_points = F, merge = T) %>%
st_buffer(dist=5) %>%
st_buffer(dist=-5) %>%
mutate(Surf = as.numeric(st_area(.))) %>%
filter(Surf > 1000) %>%
st_transform(2154)
plat1 <- plat %>%
filter(st_intersects(geometry, desserte, sparse = F))
buf <- BufferDissy(shp, r, amont,aval,pas,conc)
hors <- st_difference(plat1, buf) %>%
st_cast("LINESTRING")
hors <- BufferDissy(hors, r, amont,aval,pas,conc)
buf <- st_union(buf, hors)
return(buf)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.