--- title: "Manage trees and plot coordinates with BIOMASS" author: "Arthur Pere" date: "`r Sys.Date()`" output: prettydoc::html_pretty: number_sections: yes toc: yes highlight: vignette self_contained: yes theme: cayman vignette: > %\VignetteIndexEntry{Manage tree and plot coordinate with BIOMASS} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, echo = TRUE, comment = "#>", fig.align = "center" ) require(BIOMASS) require(knitr) ``` # Requirement You need the following information to use the following function in your analysis : - Dimension of the plots - Coordinate GPS of minimum 3 points non-aligned and relatily far away with the corresponding relative coordinates - The origin corner - The X, Y directions ```{r} trees <- read.csv(system.file("external", "NouraguesPlot.csv", package = "BIOMASS", mustWork = TRUE )) ``` ```{r echo=FALSE} kable(head(trees), digits = 3, row.names = FALSE, caption = "Head of the table trees") ``` We can see in the table that we have for each trees the name of the plot we have, the `xRel` and `yRel`, the relative coordinate of the trees inside the plot. The rest of the column is for calculate the AGB at the end. ```{r, fig.cap="Plot the coordinate long lat"} coord <- read.csv(system.file("external", "Coord.csv", package = "BIOMASS", mustWork = TRUE )) plot(coord[, c("Long", "Lat")], asp = 1) ``` We can see on the plot that the corner coordinates are spread. ```{r echo=FALSE} kable(head(coord), digits = 3, row.names = FALSE, caption = "Head of the table coord") ``` In the table, we have the name of the plot, the coordinate `Lat`, `Long` (or another projected coordinates), and `xRel`, `yRel`, the relative coordinate for the points observed. # To manage the plots ## Import the dataset and visualisation The plot is referenced in the longitude latitude coordinate so you must have the package `proj4` if you are in this situation. If you have projected coordinate, you can continue with the `projCoord` argument instead of `longlat` argument. ## Correct the GPS coordinate ```{r, cache=FALSE} correct_plot <- correctCoordGPS( longlat = coord[, c("Long", "Lat")], coordRel = coord[, c("xRel", "yRel")], rangeX = c(0, 100), rangeY = c(0, 100), drawPlot = TRUE, maxDist = 10, rmOutliers = TRUE ) str(correct_plot, max.level = 1) ``` The output of the function is a list with a data.frame `corner` it's the corner of the plot, `polygon` the spatial polygon, `outliers` the vector with the line number of the outliers and `codeUTM` the UTM code for the polygon. The outliers are calculated by a measure of distance between the predicted points and the GPS points. If this distance is higher than the value of `maxDist`, the point is considered like outliers. ## Numbering the corner We have to number the corner of the plot, it is working if we have exactly 4 points for each plot, so we have to do the correctCoordGPS before if we have not the correct number of points. ```{r} coord_num <- numberCorner( projCoord = correct_plot$cornerCoords, plot = rep("NB1", 4), origin = c(F, F, F, T), clockWise = TRUE ) plot(coord_num[, c("X", "Y")], asp = 1) text(coord_num[, c("X", "Y")], labels = coord_num[, "corner"], pos = 2, offset = 0.2) ``` On the graph, you can noted than the corner number 1 the origin of the plot. ## Cut the plot in multiple subplot ```{r} subplot <- cutPlot( projCoord = coord_num[, c("X", "Y")], plot = coord_num[, c("plot")], corner = coord_num[, c("corner")], gridsize = 25, dimX = 100, dimY = 100 ) ``` ```{r echo=FALSE} kable(head(subplot)) ``` # Trees managements ## Attribute the trees to the subplot ```{r} trees$subplot <- attributeTree(trees[, c("xRel", "yRel")], rep("NB1", nrow(trees)), subplot) ``` ## Calculate the AGB and spatialisation ```{r} trees$AGB <- computeAGB(trees$D, trees$WD, H = trees$H) AGB <- summaryByPlot(trees$AGB, trees$subplot, drawPlot = TRUE, subplot = subplot) print(AGB) ``` ## Attribute the trees to GPS coordinates There is two maners to attribute the trees to GPS coordinates ```{r} TreeCoord <- attributeTreeCoord( xy = trees[, c("xRel", "yRel")], plot = trees$plot, coordAbs = subplot, dim = c(100, 100) ) ``` ```{r echo=FALSE} kable(head(TreeCoord), digits = 3, row.names = FALSE, caption = "Head of the table TreeCoord") ``` If you want to have in GPS (longitude/latitude) coordinates (need to install proj4 first) : ```{r} #TreeCoord <- as.data.frame( proj4::project(TreeCoord, proj = correct_plot$codeUTM, inverse = TRUE) ) ``` ```{r echo=FALSE} kable(head(TreeCoord), digits = 3, row.names = FALSE, caption = "Head of the table TreeCoord") ``` If you want to have the GPS (longitude/latitude) coordinates without passing through all this step however you must use the numberCorner function: ```{r} coordAbs = data.frame(X = c(4.066923, 4.067865, 4.067842, 4.066905), Y = c(52.68883, 52.68877, 52.68793, 52.68783)) ncoordAbs = numberCorner(projCoord = coordAbs, plot = rep("NB1", 4), origin = c(TRUE, FALSE, FALSE, FALSE), clockWise = TRUE) TreeCoord <- attributeTreeCoord( xy = trees[, c("xRel", "yRel")], plot = trees$plot, coordAbs = ncoordAbs, dim = c(100, 100) ) ``` ```{r echo=FALSE} kable(head(TreeCoord), digits = 3, row.names = FALSE, caption = "Head of the table TreeCoord") ```