Oct 11, 2024
Texto breve
Simulação de corte seletivo usando dados de inventário florestal.
Usaremos o pacote LoggingLab para R (Badouard et al. 2024) para simular a extração de madeira de impacto reduzido em uma floresta tropical. O pacote deve ser instalado a partir de seu repositório no Github, pois ainda não está no CRAN.
Usaremos o tidyverse
para manipular tabelas e criar gráficos, e o sf
para manipular objetos espaciais.
Bla.
O que é isso?
As colunas exigidas pelo LoggingLab
são:
Forest
: o nome da floresta para aplicar a fórmula de volume correspondente.idTree
: um identificador exclusivo para cada árvore.Xutm
e Yutm
: as coordenadas de cada árvore.CodeAlive
: árvore viva ou morta.Family
, Genus
, Species
: dados botânicos.CircCorr
: circunferência de cada árvore.O inventário do lote 6 de Paracou está disponível dentro LoggingLab
.
Forest Plot PlotArea SubPlot idTree Protocole Xfield Yfield Xutm
1 Paracou 6 6.25 1 100726 Guyafor 13.5 201.0 286420.1
2 Paracou 6 6.25 1 100729 Guyafor 19.0 196.5 286426.4
3 Paracou 6 6.25 1 100739 Guyafor 13.5 182.0 286424.8
4 Paracou 6 6.25 1 100741 Guyafor 9.5 179.5 286421.6
5 Paracou 6 6.25 1 100747 Guyafor 14.5 167.5 286429.3
6 Paracou 6 6.25 1 100750 Guyafor 18.0 169.0 286432.3
Yutm UTMZone Lat Lon Family Genus Species
1 583135.4 22 5.272669 -52.92713 Annonaceae Oxandra asbeckii
2 583132.2 22 5.272642 -52.92707 Fabaceae Eperua grandiflora
3 583116.8 22 5.272502 -52.92709 Fabaceae Bocoa prouacensis
4 583113.4 22 5.272471 -52.92712 Celastraceae Maytenus sp.1-CAY
5 583102.9 22 5.272376 -52.92705 Chrysobalanaceae Licania membranacea
6 583105.2 22 5.272397 -52.92702 Chrysobalanaceae Licania canescens
BotaSource BotaCertainty VernName CensusYear CensusDateCertainty
1 Bota 4 muamba 2016 TRUE
2 Bota 4 Eperua grandiflora 2016 TRUE
3 Bota 4 boco 2016 TRUE
4 Bota 3 lebi tongo 2016 TRUE
5 Bota 4 santi koko 2016 TRUE
6 Bota 4 santi koko 2016 TRUE
CodeAlive MeasCode Circ CircCorr CorrCode
1 TRUE 0 39.5 39.5 0
2 TRUE 0 114.0 114.0 0
3 TRUE 0 48.0 48.0 0
4 TRUE 0 123.0 123.0 0
5 TRUE 0 54.0 54.0 0
6 TRUE 0 88.0 88.0 0
A máscara do lote define os limites da área a ser registrada.
Por que?
A máscara do lote 6 de Paracou está disponível dentro LoggingLab
.
SpeciesCriteria
contém dados específicos de cada espécie. As colunas são:
CommercialLevel
: Nível de interesse econômico. 1: principal espécie econômica, 2 ou mais: espécies registradas com o objetivo de diversificação, 0: espécies cujo gênero é coberto por um nome comercial, mas que não são registradas.
MinFD
: Diâmetro mínimo de corte, em centímetros.
UpMinFD
: Diâmetro mínimo de corte aprimorado (caso de povoamento excessivamente rico), em centímetros.
MaxFD
: Diâmetro máximo de corte, em centímetros.
Aggregative
: Caráter agregador da espécie. Se for TRUE
, as árvores isoladas não serão cortadas.
Dados de espécies de Guiana Francesa são disponível dentro LoggingLab
.
# A tibble: 6 × 8
CommercialName Genus Species CommercialLevel MinFD UpMinFD MaxFD Aggregative
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <lgl>
1 st martin rouge Andira spp 2 55 60 120 FALSE
2 bamba apici Aniba spp 2 55 60 120 FALSE
3 bagasse Bagas… guiane… 2 55 60 120 FALSE
4 assao Baliz… pedice… 2 55 60 120 FALSE
5 dokali Brosi… parina… 2 55 60 120 FALSE
6 satiné rubané Brosi… rubesc… 2 55 60 120 FALSE
ForestZoneVolumeParametersTable
contém os parâmetros de alometria a serem calculados.
\[Volume = aCoef + bCoef \times DBH^2\]
Por que?
Alometria volumétrica de Guiana Francesa são disponível dentro LoggingLab
.
Texto breve
As árvores que não estão na área registrada ou que são muito pequenas para serem consideradas são excluídas.
loggingparameters()
define todos os parâmetros de registro. Consulte sua ajuda. Os valores padrão são os usados na Guiana Francesa.
Como os dados já estavam limpos, não houve muitas alterações.
Calcule as dimensões da árvore (altura da árvore, do tronco e da copa, diâmetro da copa, volume colhível, densidade da madeira e biomassa).
inventory <- addtreedim(inventory, ForestZoneVolumeParametersTable)
head(select(inventory, TreeHarvestableVolume, TrunkHeight, TreeHeight, CrownHeight,
CrownDiameter, WoodDensity, AGB))
TreeHarvestableVolume TrunkHeight TreeHeight CrownHeight CrownDiameter
1 0.1027084 8.272213 14.65595 6.383735 2.294504
2 1.1181093 10.811462 27.40065 16.589191 8.846387
3 0.1687473 9.203739 16.78716 7.583417 3.383477
4 1.3075022 10.860306 28.35561 17.495301 9.055571
5 0.2230879 9.613873 18.14034 8.526472 3.589296
6 0.6517747 10.576502 24.12416 13.547658 6.521511
WoodDensity AGB
1 0.7700000 0.1003184
2 0.7040000 1.3401159
3 1.0536667 0.2275608
4 0.7131944 1.6277207
5 0.8800000 0.2590981
6 0.8800000 0.8877632
Gere a trilha principal do terreno inventariado, como linhas na borda e fora do terreno.
Por que ?
Defina as zonas de colheita e as zonas acessíveis por máquinas dentro da parcela.
Por padrão, uma unidade de prospecção é uma área conectada a uma trilha de caminhão ou a uma trilha principal de skid, com uma inclinação de menos de 27%, evitando planícies e o sistema de água (buffer de 30 m).
Usamos um cenário manual para poder alterar os argumentos facilmente. O guincho é definido como 2, ou seja, a garra é usada, se possível (6 m de extensão), e o cabo é usado até 40 m.
Bla.
HarvestableArea <- harvestableareadefinition(
topography = DTMParacou,
creekverticaldistance = CreekDistances$distvert,
creekhorizontaldistance = CreekDistances$disthorz,
maintrails = MainTrails,
plotmask = PlotMask,
scenario = "manual",
winching = "2",
advancedloggingparameters = loggingparameters()
)
As áreas verdes claras podem ser colhidas. As verdes escuras podem ser colhidas por máquinas.
Selecionar árvores para colheita e árvores futuras e de reserva.
As árvores podem ser colhidas se:
Se o volume colhível for maior que o volume objetivo e a diversificação não tiver sido escolhida, o MinFD apenas da primeira espécie de classificação econômica será aumentado. Se a diversificação for permitida, o MinFD das espécies de primeiro e segundo níveis econômicos será aumentado. Em seguida, as árvores a serem colhidas são escolhidas em ordem decrescente de volume, até que o volume objetivo seja atingido.
Se o volume extraível for muito baixo, a diversificação pode ser aplicada (specieslax = TRUE
): as árvores de todas as classificações comerciais são selecionadas em ordem decrescente de volume até que o volume objetivo seja atingido, ou a extração pode continuar apesar de um volume objetivo não atingido ou ser abandonada (objectivelax = FALSE
).
inventory %>%
commercialcriteriajoin(SpeciesCriteria) ->
inventory
inventory %>%
treeselection(
topography = DTMParacou,
speciescriteria = SpeciesCriteria,
scenario ="manual",
objective = 30,
fuel = "2",
winching = "2",
diversification = TRUE,
specieslax = FALSE,
objectivelax = TRUE,
harvestablearea = HarvestableArea$HarvestableArea,
plotslope = HarvestableArea$PlotSlope,
maintrails = MainTrails,
harvestablepolygons = HarvestableArea$HarvestablePolygons,
advancedloggingparameters = loggingparameters()
) ->
TreeSelection
As the harvestable volume (= 187.4m^3)
was higher (by 75m^3)
than the objective volume, the Minimum Falling Diameter (MinFD) of the 1st and 2nd economic ranks species
were increased to UpMinFD. The objective volume has now been reached.
A partir das trilhas de arraste principais, desenhe trilhas de arraste secundárias nas zonas acessíveis às máquinas, permitindo coletar as árvores selecionadas com as máquinas escolhidas (argumento winching
). O layout é otimizado para reduzir a distância percorrida, respeitando as restrições topográficas e evitando árvores a serem protegidas.
As trilhas de arraste (principal e secundária) permitem que a madeira seja transportada do talhão para as estradas de caminhões.
As trilhas de arraste secundárias:
ScndTrailWidth
),MaxTrailCenterlineSlope
),MaxTrailCrossSlope
).Elas evitam:
BigTrees
)Eles se juntam, em ordem decrescente de prioridade:
O argumento cenário
pode ser:
CableLength
) das árvores.GrappleMaxslope
). As trilhas ficam a até 6 m (GrappleLength
) das árvores. O cabo é usado somente quando a inclinação longitudinal é maior que 20% ou quando a árvore a ser derrapada está isolada de outras árvores a serem exploradas, de 6 a 40 m. As trilhas devem estar a menos de 40 m (CableLength
) das árvores.ScndTrailOutputs <- secondtrailsopening(
topography = DTMParacou,
plotmask = PlotMask,
maintrails = MainTrails,
plotslope = HarvestableArea$PlotSlope,
harvestablepolygons = HarvestableArea$HarvestablePolygons,
machinepolygons = HarvestableArea$MachinePolygons,
treeselectionoutputs = TreeSelection,
scenario = "manual",
winching = "2",
fuel = "2",
advancedloggingparameters = loggingparameters()
)
inventory <- ScndTrailOutputs$inventory
Essa etapa pode levar algum tempo.
As funções de mapeamento fáceis de usar ainda não estão no pacote. Usamos objetos sf
e ggplot()
.
Primeiro, prepare um sf
para todos os tipos de árvores.
inventory %>%
filter(LoggingStatus == "non-harvestable") %>%
st_as_sf(coords = c("Xutm", "Yutm")) %>%
st_set_crs(st_crs(SecondaryTrails$MainTrailsAccess)) ->
NonHarvestable
inventory %>%
filter(LoggingStatus == "harvestable") %>%
st_as_sf(coords = c("Xutm", "Yutm")) %>%
st_set_crs(st_crs(SecondaryTrails$MainTrailsAccess)) ->
Harvestable
inventory %>%
filter(LoggingStatus == "reserve") %>%
st_as_sf(coords = c("Xutm", "Yutm")) %>%
st_set_crs(st_crs(SecondaryTrails$MainTrailsAccess)) ->
Reserve
inventory %>%
filter(LoggingStatus == "future") %>%
st_as_sf(coords = c("Xutm", "Yutm")) %>%
st_set_crs(st_crs(SecondaryTrails$MainTrailsAccess)) ->
Future
Simular a derrubada da árvore, com o sucesso ou fracasso da direção da queda da árvore, pé para a trilha, com um ângulo para a trilha e evitando as árvores a serem protegidas, conforme desejado. Se a madeira combustível for explorada, a árvore será direcionada com a copa para a trilha (se a orientação for bem-sucedida) para que possa ser recuperada com uma garra.
A derrubada da árvore cria uma árvore (incluindo a copa) no solo, com dimensões calculadas por alometrias específicas (advancedloggingparameters
). O processo depende do cenário. Por exemplo, cenários sem madeira para combustível implicam:
TreefallSuccessProportion
) de probabilidade: base da árvore em direção à trilha mais próxima.Escolhemos fuel = “2”
: exploração de árvores ocas, danos e parte não utilizada das toras. As árvores serão recuperadas da copa com uma garra, se possível. Caso contrário, a recuperação será feita a partir da base do poste com um cabo em ângulo com a trilha.
Fazemos um mapa com todas as árvores, inclusive as derrubadas.
inventory %>%
filter(Selected == "1") %>%
st_as_sf(coords = c("Xutm", "Yutm")) %>%
st_set_crs(st_crs(SecondaryTrails$MainTrailsAccess)) ->
Selected
inventory %>%
filter(ProbedHollow == "1") %>%
st_as_sf(coords = c("Xutm", "Yutm")) %>%
st_set_crs(st_crs(SecondaryTrails$MainTrailsAccess)) ->
Hollow
inventory %>%
filter(Treefall2ndDeath == "1") %>%
st_as_sf(coords = c("Xutm", "Yutm")) %>%
st_set_crs(st_crs(SecondaryTrails$MainTrailsAccess)) ->
Treefall
inventory %>%
sf::st_as_sf(coords = c("Xutm", "Yutm")) %>%
sf::st_set_crs(sf::st_crs(MainTrails)) ->
Inventory_crs
inventory %>%
getgeometry(TreePolygon) %>%
sf::st_set_crs(sf::st_crs(MainTrails)) ->
TreePolygon
mapa <- ggplot() +
geom_sf(data = Inventory_crs) +
geom_sf(data = NonHarvestable, aes(colour = "Non-harvestable"), show.legend = "point") +
geom_sf(data = Future, aes(colour = "Future"), size = 4, show.legend = "point") +
geom_sf(data = Reserve, aes(colour = "Reserve"), size = 4, show.legend = "point") +
geom_sf(data = Harvestable, aes(colour = "Harvestable"), size = 4, show.legend = "point") +
geom_sf(data = TreePolygon, alpha = 0.5, fill = "red") +
geom_sf(data = Selected, aes(colour = "Selected"), show.legend = "point") +
geom_sf(data = Hollow, aes(colour = "Hollow"), show.legend = "point") +
geom_sf(data = Treefall, aes(colour = "Treefall"), 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",
"Hollow" = "forestgreen",
"Treefall" = "chocolate4"
)
) +
labs(color = "Logging status")
Calcule o volume de madeira colhida em árvores saudáveis exploradas para madeira e nas árvores ocas, se elas também forem colhidas para lenha.
Os detalhes da produção por espécie estão no inventário.
TimberV$inventory %>%
filter(DeathCause == "cut") %>%
group_by(CommercialName) %>%
summarise(
trees_n = n(),
volume = sum(TimberLoggedVolume),
CommercialLevel = unique(CommercialLevel)
)
# A tibble: 8 × 4
CommercialName trees_n volume CommercialLevel
<chr> <int> <dbl> <dbl>
1 angélique 1 8.89 1
2 chawari 2 7.62 2
3 gonfolo gris 1 3.56 1
4 grignon franc 4 21.6 1
5 maho noir 3 12.3 2
6 wacapou 1 3.61 1
7 wapa 10 37.7 2
8 wapa courbaril 1 5.04 2
Texto breve
Todas as etapas de simulação podem ser incluídas em uma única função para economizar tempo.
Rslt <- loggingsimulation1(
Paracou6_2016,
plotmask = PlotMask,
topography = DTMParacou,
creekverticaldistance = CreekDistances$distvert,
creekhorizontaldistance = CreekDistances$disthorz,
speciescriteria = SpeciesCriteria,
volumeparameters = ForestZoneVolumeParametersTable,
scenario = "manual",
objective = 30,
fuel = "0",
winching = "2",
directionalfelling = "2",
diversification = TRUE,
specieslax = FALSE,
objectivelax = TRUE,
crowndiameterparameters = ParamCrownDiameterAllometry,
advancedloggingparameters = loggingparameters()
)
Várias simulações podem ser executadas pela função loggingsimulation()
para levar em conta a estocasticidade com o argumento iter
(número de simulações) e cores
(número de núcleos de computador usados para paralelizar o cálculo).
Retorna um resumo das saídas da função de simulação de registro.
inventory : Paracou6_2016
scenario : manual
objective : 30 m3/harvestable ha
fuel : 0
diversification : TRUE
winching : 2
directionalfelling : 2
specieslax : FALSE
objectivelax : TRUE
Harvestable area : 3.75 ha
Objective volume : 112.4 m3
Initial harvestable volume : 179.4 m3, 47.9 m3/harvestable ha
Timber logged volume : 112.2 m3, 29.9 m3/harvestable ha
No hollow timber logged volume : 112.2 m3, 29.9 m3/harvestable ha
Timber extracted volume (timber volume after purge : 96.5 m3, 25.8 m3/harvestable ha
Error in round(x$FuelWoodBiomass, digits = 1) :
argument non numérique pour une fonction mathématique
Os cenários reúnem os principais parâmetros de gerenciamento.
Eles são usados para definir a área explorável, as árvores a serem cortadas e a modelagem de trilhas secundárias.
# A tibble: 6 × 6
Type SpatialDataType Objective Diversification Winching DirectionalFelling
<chr> <chr> <chr> <lgl> <fct> <fct>
1 RIL1 SRTM 20-25 FALSE 0 0
2 RIL2bro… LIDAR 20-25 FALSE 0 0
3 RIL2 LIDAR 20-25 FALSE 1 0
4 RIL3 LIDAR 25-30 TRUE 2 2
5 RIL3fuel LIDAR 25-30 TRUE 2 2
6 RIL3fue… LIDAR 25-30 TRUE 2 2
Os cenários reúnem os principais parâmetros de gerenciamento.
Eles são usados para definir a área explorável, as árvores a serem cortadas e a modelagem de trilhas secundárias.
Type | SpatialDataType | Objective | Diversification | Winching | DirectionalFelling |
---|---|---|---|---|---|
RIL1 | SRTM | 20-25 | FALSE | 0 | 0 |
RIL2broken | LIDAR | 20-25 | FALSE | 0 | 0 |
RIL2 | LIDAR | 20-25 | FALSE | 1 | 0 |
RIL3 | LIDAR | 25-30 | TRUE | 2 | 2 |
RIL3fuel | LIDAR | 25-30 | TRUE | 2 | 2 |
RIL3fuelhollow | LIDAR | 25-30 | TRUE | 2 | 2 |
As colunas são:
Type
: O nome do cenário.SpatialDataType
: o tipo de dados espaciais (Lidar ou SRTM).Objective
: Volume objetivo por hectare.Diversification
: Permitir o corte de outras espécies além das principais espécies comerciais.Winching
: Método de guincho. Sem cabo ou garra = “0”, somente cabo = “1”, garra + cabo = “2”.DirectionalFelling
: “0” = não utilizado, ‘1’ = apenas para evitar danos a árvores futuras e de reserva, ‘2’ = evitar danos a árvores futuras e de reserva + orientação da trilha.Todas as funções permitem scenario = “manual”
: nesse caso, todos os argumentos devem ser adicionados manualmente. Seu nome é o mesmo das colunas.
Texto breve