What was / is / will be the size of the survey area? If you work with quadrats or straight lines the answer is simple (length x width). If the plot is not a straight line the calculations are not so simple. Add to this the additional complexities resulting from real world logistical challenges (who put that hill there??) and we end up with varied lengths and shapes for plots that follow isolines. Here I show how to calculate areas using the R package parcelareadev.
To calculate areas parcelareadev takes compass bearings and lengths measured during plot installation to:
1) Derive coordinates and calculate the survey area of nonlinear plots
2) Export .pdf files showing plots
3) Export calculated areas as .csv
4) Export plot midlines as shapefiles and .kml
Running the following will generate results from which we can produce summaries:
library(parcelareadev)
data("br319")
dados_in <- br319
list_res <- parcelareadev::area_calc(
data_in = dados_in,
faixa_dist = c(0.5, 1, 3,12, 10, 20, 20.5, 22),
faixa_lado = c(0.5, 1, 3,12, 10, 20, 21, 22),
area_epsg = 3395
)
# Calculate area and export results
df.resumo <- parcelareadev::area_results(results_list = list_res,
make_shape = FALSE)
A simple case is when surveys were conducted at some distance to the left and right of the plot midline. The figure below shows such a symetric survey width (20 meters) to the left and right of the plot midline (solid yellow line).
To calculate the density of any study group we need to know the survey area. These values are presented in the data.frame df.resumo
. For this case (20m to left and right) I just need to request the values from the data.frame as follows:
#select all values for 20m and calculated including left and right
selSim <- which(df.resumo$lado=="ambos" & df.resumo$faixa_dist=="20m")
df.resumo[selSim, c('.id', 'variable','area_m2','seg_count') ]
## .id variable area_m2 seg_count
## 6 M01_TN_0500 All 9900.275 25
## 14 M01_TN_0500 Remove_Trilha 9900.275 25
## 22 M01_TN_0500 Remove_Angle 9900.275 25
## 30 M01_TN_0500 Remove_All 9900.275 25
## 102 M02_TN_0500 All 12698.933 32
## 110 M02_TN_0500 Remove_Trilha 10719.267 27
## 118 M02_TN_0500 Remove_Angle 12698.933 32
## 126 M02_TN_0500 Remove_All 10719.267 27
## 198 M02_TN_2500 All 11497.953 31
## 206 M02_TN_2500 Remove_Trilha 11497.953 31
## 214 M02_TN_2500 Remove_Angle 11497.953 31
## 222 M02_TN_2500 Remove_All 11497.953 31
## 294 M03_TN_1500 All 9324.065 25
## 302 M03_TN_1500 Remove_Trilha 8923.404 24
## 310 M03_TN_1500 Remove_Angle 9013.884 23
## 318 M03_TN_1500 Remove_All 8613.222 22
## 390 M03_TN_2500 All 8860.179 25
## 398 M03_TN_2500 Remove_Trilha 8860.179 25
## 406 M03_TN_2500 Remove_Angle 8490.504 24
## 414 M03_TN_2500 Remove_All 8490.504 24
The results show that considering all 25 sections, the plot (M03_TN_1500) has an area of 9324 m2. If the plot was straight (250 * (20*2)) the area would be 10 000 m2 (1 hectare). Does this difference matter? Maybe / maybe not, but there is an obvious improvement in precision and accuracy.
The table also shows the area and number of sections (“seg_count”) of four different cases, where the plot may have a different length and shape
(page 108 in the book: http://ppbio.inpa.gov.br/sites/default/files/Biodiversidade%20e%20monitoramento%20ambiental%20integrado.pdf ):
“All”: all sections;
“Remove Trilha”: Discarding sections that cross the main trail;
“Remove Angle”: Discarding sections with an angle less than or equal to 70 degrees;
“Remove All”: Discarding all from “2” and “3”.
Researchers need to access plots, so a corridor is frequently used that is not included in the survey area. For example 1 meter (0.5 to the left and 0.5m to the right, shaded black) of the midline (solid yellow line).
In this case, we can calculate the area as follows, taking 20.5 meter width and subtracting 0.5. We can use the plyr library to run this calculation for all plots as follows:
library(plyr)
# here we select two widths per plot
# to avoid this step could simply specify only two widths with function
# "area_calc" (option "faixa_dist")
selSim2 <- which(df.resumo$lado=="ambos" & df.resumo$faixa_dist %in% c("20.5m","0.5m"))
# as we only have two widths, use max and min to make the calculation
plyr::ddply(df.resumo[selSim2, ], .(.id, variable), summarize,
area_m2 = max(na.omit(area_m2)) - min(na.omit(area_m2))
)
## .id variable area_m2
## 1 M01_TN_0500 All 9898.512
## 2 M01_TN_0500 Remove_Trilha 9898.512
## 3 M01_TN_0500 Remove_Angle 9898.512
## 4 M01_TN_0500 Remove_All 9898.512
## 5 M02_TN_0500 All 12701.197
## 6 M02_TN_0500 Remove_Trilha 10721.743
## 7 M02_TN_0500 Remove_Angle 12701.197
## 8 M02_TN_0500 Remove_All 10721.743
## 9 M02_TN_2500 All 11439.217
## 10 M02_TN_2500 Remove_Trilha 11439.217
## 11 M02_TN_2500 Remove_Angle 11439.217
## 12 M02_TN_2500 Remove_All 11439.217
## 13 M03_TN_1500 All 9285.004
## 14 M03_TN_1500 Remove_Trilha 8884.454
## 15 M03_TN_1500 Remove_Angle 8991.906
## 16 M03_TN_1500 Remove_All 8591.357
## 17 M03_TN_2500 All 8816.004
## 18 M03_TN_2500 Remove_Trilha 8816.004
## 19 M03_TN_2500 Remove_Angle 8446.408
## 20 M03_TN_2500 Remove_All 8446.408
For the same plot (“M03_TN_1500”) and 20m survey width (20.5 - 0.5 = 20) we now have an overall area of 9285 m2 .
In this case, a 1 meter access corridor (shaded black) was installed to the left side of the plot midline (solid yellow line).
In this case, we need to run left and right side calculations seperately, then add values to obtain the total area. We can calculate the area as follows, taking 20 meter width from the right. For the left we need to subtract the coridoor (21 - 1 = 20m). We can use the plyr library to help run this calculation for all plots as follows:
library(plyr)
#We need 20m from the right side
selSimR <- which(df.resumo$lado=="right" & df.resumo$faixa_dist=="20m")
# We need 21 and 1m from the left side
selSimL <- which(df.resumo$lado=="left" & df.resumo$faixa_dist %in% c("21m","1m"))
# Make a dataframe with areas calculated for left and right sides
dflc <- merge(
plyr::ddply(df.resumo[selSimR, ], .(.id, variable), summarize,
a_m2_r = max(na.omit(area_m2))
),
plyr::ddply(df.resumo[selSimL, ], .(.id, variable), summarize,
a_m2_l = max(na.omit(area_m2)) - min(na.omit(area_m2))
)
)
# make a column with the total
dflc$area_m2_tot <- dflc$a_m2_r + dflc$a_m2_l
# show results for plot M03_TN_1500
dflc[which(dflc$'.id'=="M03_TN_1500"), ]
## .id variable a_m2_r a_m2_l area_m2_tot
## 13 M03_TN_1500 All 4462.307 4834.855 9297.163
## 14 M03_TN_1500 Remove_All 4104.194 4492.804 8596.999
## 15 M03_TN_1500 Remove_Angle 4197.825 4810.249 9008.073
## 16 M03_TN_1500 Remove_Trilha 4368.677 4517.411 8886.088
For the same plot (“M03_TN_1500”) and 20m survey width, an asymetric 1m corridor results in an area of 9297 m2 .
These results show that nonlinear area calculations generate improved estmates of survey area (7% (9324/10000)). Different survey designs with the same 20 meter width, generate different areas (9324, 9285 and 9297 m2), but these differences are relatively small (typically < 1%).
There are obviously myriad ways samples can be collected (different widths, symetric, asymetric, with and without corridors). The examples presented hopefully show how the R package parcelareadev can be used for at least some of these cases.