R/ExploiTracteur.R

Defines functions ExploiTracteur

Documented in ExploiTracteur

#' 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)
}
Bruciamacchie/Forestree documentation built on Feb. 23, 2022, 3:50 p.m.