Skip to contents

Simulates the tree felling, with the success or failure of the direction of the tree fall, foot to the trail, with an angle to the trail and avoiding the trees to protect, as desired. If FWE (Fuel Wood Exploitation), the tree will be directed with its crown towards the trail (if the orientation is successful) if it can be retrieved with a grapple.

Usage

treefelling(
  inventory,
  scenario,
  fuel = NULL,
  winching = NULL,
  directionalfelling = NULL,
  maintrailsaccess,
  scndtrail,
  advancedloggingparameters = loggingparameters()
)

Arguments

inventory

Input inventory (see the inputs formats and metadata in the vignette) (data.frame)

scenario

Logging scenario among: "RIL1", "RIL2broken", "RIL2", "RIL3", "RIL3fuel", "RIL3fuelhollow" or "manual"(character) (see the vignette)

fuel

Fuel wood exploitation: no exploitation = "0", exploitation of damage and unused part of logged trees for fuel = "1", exploitation of hollow trees, damage and and unused part of the log for fuel = "2" If fuel wood exploitation (fuel = "1" or "2") the tree will be recovered from the crown with a grapple if possible (respected grapple conditions). If not, recovery at the foot with a cable at an angle to the trail. Avoid future/reserve trees if chosen.

winching

"0": no cable or grapple (trail to tree foot) "1": only cable (default = 40 m) "2": grapple (default = 6 m) + cable (grapple priority) If grapple + cable (winching = "2") without fuel wood (fuel = "0") recovery of the tree foot with grapple if possible (respected grapple conditions) otherwise with cable with angle to the trail. Avoidance of future/reserves if chosen.

directionalfelling

Directional felling = "0": only to direct the foot of the tree towards the trail "1": to direct the foot of the tree towards the trail + to avoid damage to future and reserve trees if possible "2": to avoid damage to future and reserve trees if possible + orientation angle to the trail. Among the 2 possible angle positions, the position that favours the return to the main trail should be chosen. The angle to the trail is favoured to avoid future/reserve trees. If the avoidance of future/reserve trees could not be performed, a message is returned.

maintrailsaccess

Access point of main trail for each harvestable zone (sf or sfc)

scndtrail

Secondary trails (sf)

advancedloggingparameters

Other parameters of the logging simulator loggingparameters (list)

Value

Input inventory with new columns:

  • The tree felling success or fail("TreeFellingOrientationSuccess")

  • The fallen trees ("TreePolygon"): a MULTIPOLYGON of the tree oriented according to the chosen scenario

  • The dead trees under felled trees (DeathCause = "treefall2nd")

Details

The felling of the tree creates a tree (including crown) on the ground, with dimensions calculated with specific allometries ('advancedloggingparameters').

The crowns (fuel wood exploitation case) can only be retrieved with a grapple.

RIL1/RIL2broken/RIL2:

  • at 40%: random fall

  • at 60% ('TreefallSuccessProportion'): base of the tree towards the nearest trail (main or secondary)

RIL3/RIL3 timber + fuel wood:

  • at 40%: random fall

  • at 60% ('TreefallSuccessProportion'):

    • if trees < 6 m from the trail and slope <20% (grapple use):

      • no particular angle to orientate to the trail, only to orient the tree base(crown if fuel wood exploitation) as close as possible to the trail

      • priority 1: avoid futures and reserves,

      • priority 2: conformation allowing skidding back to the main trail

    • otherwise (trees > 6 m from the trail and/or slope >20%)(cable use):

      • 30-45◦ (default) orientation ('MinTreefallOrientation'; 'MaxTreefallOrientation')

      • base to nearest trail

      • conformation allowing skidding back to the main trail

      • avoid futures and reserves if possible

Damage: Secondary windfall: Not all trees under the felled tree (timber or energy) will be considered dead. The probability of a tree dying under a felled tree is estimated by the model 'Treefall2ndDeathModel', according to the DBH of the tree whose probability of dying is estimated.

Examples

if (FALSE) { # \dontrun{
set.seed(1)
data(SecondaryTrails)


scenario <- "manual"
winching <- "2"
fuel <- "2"
directionalfelling <- "2"


NewInventory <- treefelling(SecondaryTrails$inventory,
  scenario = scenario, fuel = fuel,
  winching = winching,
  directionalfelling = directionalfelling,
  maintrailsaccess = SecondaryTrails$MainTrailsAccess,
  scndtrail = SecondaryTrails$SmoothedTrails,
  advancedloggingparameters = loggingparameters())

TreePolygon <- NewInventory %>%
getgeometry(TreePolygon) %>%
sf::st_set_crs(sf::st_crs(MainTrails)) # set a crs

Inventory_crs <- sf::st_as_sf(NewInventory, coords = c("Xutm", "Yutm")) # as sf
Inventory_crs <- sf::st_set_crs(Inventory_crs, sf::st_crs(MainTrails)) # set a crs

Treefall <- sf::st_as_sf(
dplyr::filter(NewInventory, DeathCause == "treefall2nd"),
coords = c("Xutm", "Yutm")) %>%
sf::st_set_crs(sf::st_crs(MainTrails)) # set a crs

NonHarvestable <- sf::st_as_sf(
dplyr::filter(Inventory_crs, LoggingStatus == "non-harvestable"),
coords = c("Xutm", "Yutm"))

Harvestable <- sf::st_as_sf(
dplyr::filter(Inventory_crs, LoggingStatus == "harvestable"),
coords = c("Xutm", "Yutm"))

HarvestableUp <- sf::st_as_sf(
dplyr::filter(Inventory_crs, LoggingStatus == "harvestableUp"),
coords = c("Xutm", "Yutm"))

Selected <- sf::st_as_sf(
dplyr::filter(Inventory_crs, Selected == "1"), coords = c("Xutm", "Yutm"))

Reserve <- sf::st_as_sf(
dplyr::filter(Inventory_crs, LoggingStatus == "reserve"),
coords = c("Xutm", "Yutm"))

Future <- sf::st_as_sf(
dplyr::filter(Inventory_crs, LoggingStatus == "future"),
coords = c("Xutm", "Yutm"))

ProbedHollow <- sf::st_as_sf(
dplyr::filter(Inventory_crs, ProbedHollow == "1"), coords = c("Xutm", "Yutm"))

VisibleDefect <- sf::st_as_sf(
dplyr::filter(Inventory_crs, VisibleDefect == "1"), coords = c("Xutm", "Yutm"))

Treefall2nd <- sf::st_as_sf(
dplyr::filter(Inventory_crs, DeathCause == "treefall2nd"), coords = c("Xutm", "Yutm"))

library(ggplot2)
ggplot() +
  geom_sf(data = Inventory_crs) +
  geom_sf(data = NonHarvestable,
  aes(colour = "Non-harvestable"), show.legend = "point") +
  geom_sf(data = VisibleDefect,
  aes(colour = "Visible defect"), show.legend = "point") +
  geom_sf(data = Future,
  aes(colour = "Future"), show.legend = "point", size = 4) +
  geom_sf(data = Reserve,
  aes(colour = "Reserve"), show.legend = "point", size = 4) +
  geom_sf(data = Harvestable,
  aes(colour = "Harvestable"), show.legend = "point", size = 4) +
  geom_sf(data = HarvestableUp,
  aes(colour = "HarvestableUp"), show.legend = "point", size = 4) +
  geom_sf(data = TreePolygon, # cuted trees
  alpha = 0.5, fill = "red") +
  geom_sf(data = Selected, aes(colour = "Selected"), show.legend = "point") +
  geom_sf(data = ProbedHollow,
  aes(colour = "Probed hollow"), show.legend = "point") +
  geom_sf(data = Treefall2nd,
  aes(colour = "Treefall2nd"), show.legend = "point") +
  geom_sf(data = SecondaryTrails$maintrailsaccess,
  alpha = 0.5, fill = "black") +
  geom_sf(data = SecondaryTrails$SmoothedTrails,
  alpha = 0.5, fill = "black") +

  scale_colour_manual(values = c("Non-harvestable" = "grey",
  "Visible defect" = "pink", "Harvestable" = "skyblue",
  "HarvestableUp" = "blue", "Selected" = "red", "Future" = "orange",
  "Reserve" = "purple", "Probed hollow" = "forestgreen",
  "Treefall2nd" = "chocolate4")) +
  labs(color = "Logging status")
} # }

if (FALSE) { # \dontrun{
# The trees under the fallen trees
suppressWarnings(sf::st_intersection( # trees under the fallen trees
  getgeometry (NewInventory, TreePolygon),
  sf::st_as_sf(NewInventory, coords = c("Xutm", "Yutm"))
)) %>%
  ggplot() +
  geom_sf()
} # }