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()
} # }