Code
PLOT_LAS_DIR = "data/plot_las_files"
LABELS_FPATH = "data/labels.csv"
METRICS_CSV_OUT_FPATH <- "data/lidar_metrics.csv"
RE_COMPUTE = FALSESet filepaths
Load required R packages
Load labels and plot point clouds
Calculate LiDAR metrics using the lidR Metrics package
https://github.com/ptompalski/lidRmetrics
calc_metrics <- function(las) {
metrics <- lidRmetrics::metrics_set3(x = las@data$X,
y = las@data$Y,
z = las@data$Z,
i = las@data$Intensity,
ReturnNumber = las@data$ReturnNumber,
NumberOfReturns = las@data$NumberOfReturns)
metrics <- unlist(metrics)
metrics <- as.data.frame(t(metrics))
stopifnot(ncol(metrics) == 108)
if (!is.data.frame(metrics)) {
stop("The output is not a data frame.")
}
return(metrics)
}
if(RE_COMPUTE){
las_ls <- purrr::map(las_fpaths, readLAS, .progress = FALSE)
metrics_df_ls <- purrr::map(las_ls, calc_metrics, .progress = TRUE)
metrics_df <- dplyr::bind_rows(metrics_df_ls) %>%
# Drop any columns with NAs
dplyr::select(where(~!any(is.na(.))))
# Add plot ID
metrics_df$plot_id <- labels_df$plot_id
# Export
metrics_df %>% write_csv(METRICS_CSV_OUT_FPATH)
metrics_df %>% head(3)
}