lidar:projetos:rcode_alsmodelo
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anteriorRevisão anterior | |||
lidar:projetos:rcode_alsmodelo [2023/11/27 10:34] – lcer | lidar:projetos:rcode_alsmodelo [2023/11/27 10:41] (atual) – removida lcer | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
- | [[ lidar: | ||
- | |||
- | < | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Inventário com dados LiDAR na Fazenda Modelo ~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # | ||
- | # Autor: Luiz Carlos Estraviz Rodriguez | ||
- | # Departamento de Ciências Florestais | ||
- | # ESALQ/USP - 25/Nov/2023 | ||
- | # | ||
- | # Inventário florestal da Fazenda Modelo | ||
- | # - download dos dados mantidos em um repositório github público | ||
- | # - shape files dos talhões florestais | ||
- | # - LiDAR multitemporal (2013 e 2014) | ||
- | # - sugestão de pasta para armazenamento local: | ||
- | # C:/ | ||
- | # | ||
- | # Linguagem de programação: | ||
- | # R (v 4.3) | ||
- | # | ||
- | # | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | rm(list=ls(all=TRUE)) | ||
- | gc() | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # 1. Leitura e organização inicial de dados | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ---- | ||
- | if(!require(tidyverse)) | ||
- | install.packages(" | ||
- | library(tidyverse) | ||
- | |||
- | # Define diretórios e pastas de trabalho | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | prjNam <- " | ||
- | wrkDir <- str_c(' | ||
- | dir.create(wrkDir, | ||
- | setwd(str_c(wrkDir)) | ||
- | lidDir <- str_c(' | ||
- | dir.create(lidDir, | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Define os nomes dos tiles LiDAR multitemporais que serão lidos do | ||
- | # repositório, | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | gitOnde < | ||
- | gitNome < | ||
- | " | ||
- | " | ||
- | # anoData <- c(" | ||
- | anoData <- c(" | ||
- | |||
- | # Faz o download dos tiles | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | options(timeout=1000) # Reset timeout oferecendo mais tempo de download | ||
- | for (ano in anoData) { | ||
- | dirLAZ <- paste0(lidDir, | ||
- | dir.create(dirLAZ, | ||
- | for (nome in gitNome){ | ||
- | gitFile <- paste0(gitOnde, | ||
- | localFl <- paste0(dirLAZ, | ||
- | if(!file.exists(localFl)) | ||
- | download.file(gitFile, | ||
- | } | ||
- | } | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Download dos shapes da Fazenda Modelo (2 layers: talhoes e parcelas) | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | gitOnde <- " | ||
- | gitNome <- " | ||
- | gitArqv <- file.path(gitOnde, | ||
- | |||
- | tmpd <- tempdir(check = TRUE) # diretório temporário | ||
- | zipf <- file.path(tmpd, | ||
- | |||
- | options(timeout=1000) # Reset timeout oferecendo mais tempo de download | ||
- | if(!file.exists(zipf)) | ||
- | download.file(gitArqv, | ||
- | |||
- | shpDir <- str_c(wrkDir, | ||
- | dir.create(shpDir, | ||
- | unzip(zipf, exdir = shpDir) | ||
- | unlink(zipf) | ||
- | # ---- | ||
- | |||
- | |||
- | # ********************************************************************* | ||
- | # 2: A Amostragem Dupla (AD) com variável auxiliar LiDAR começa aqui. | ||
- | # **************************************************************** ---- | ||
- | # devtools:: | ||
- | # devtools:: | ||
- | if(!require(lidR)) | ||
- | install.packages(" | ||
- | # e tiver o package devtools instalado, rode | ||
- | # alternativamente as duas linhas acima. | ||
- | library(lidR) | ||
- | |||
- | if(!require(future)) | ||
- | install.packages(" | ||
- | library(future) | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Define quantos cores vão ser usados no processamento paralelo | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | cores <- as.integer(parallel:: | ||
- | if (cores > 4L){cores <- cores - 1L} else {cores <- 3L} | ||
- | plan(multisession, | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Leitura dos catálogos de dados LiDAR (2013 e 2014) | ||
- | # Exibe conteúdo do catálogo e confere se os mapas de tiles são iguais | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | dirLAZ <- paste0(lidDir, | ||
- | ctg <- readLAScatalog(dirLAZ) | ||
- | opt_select(ctg) <- " | ||
- | plot(ctg) | ||
- | |||
- | if(!require(mapview)) | ||
- | install.packages(" | ||
- | library(mapview) | ||
- | plot(ctg, mapview = TRUE, map.type = " | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Recorta nuvens usando os limites dos talhões com buffer de 10m | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | opt_chunk_buffer(ctg) <- 10 # 10 m buffer | ||
- | opt_output_files(ctg) <- paste0(tempfile(), | ||
- | ctg_tal = clip_roi(ctg, | ||
- | |||
- | plot(ctg_tal, | ||
- | plot(ctg_tal, | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Classifica pontos de solo | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | if(!require(RCSF)) | ||
- | install.packages(" | ||
- | library(RCSF) | ||
- | opt_output_files(ctg_tal) <- paste0(tempdir(), | ||
- | ctg <- classify_ground(ctg_tal, | ||
- | rm(ctg_tal) | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Normaliza as nuvens de pontos dos talhões | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | opt_output_files(ctg) <- paste0(tempdir(), | ||
- | ctg <- normalize_height(ctg, | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Converte e salva o novo conjunto de tiles normalizado | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | dirLAZ <- paste0(dirLAZ, | ||
- | opt_output_files(ctg) <- | ||
- | paste0(dirLAZ, | ||
- | opt_chunk_buffer(ctg) <- 20 # com buffers ao redor de cada tile | ||
- | opt_chunk_size(ctg) <- 300 # retile para tiles de 300 m | ||
- | opt_laz_compression(ctg) <- TRUE # mantém formato LAZ | ||
- | ctg <- catalog_retile(ctg) | ||
- | plot(ctg, mapview = TRUE, map.type = " | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Lê o shape e atributos dos talhoes | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | if(!require(sf)) | ||
- | install.packages(" | ||
- | library(sf) | ||
- | shpArq | ||
- | tal_shp <- st_read(shpArq) | ||
- | st_is_valid(tal_shp) | ||
- | plot(tal_shp, | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Lê os centróides das parcelas de inventário convencional | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | shpArq | ||
- | par_shp <- st_read(shpArq) | ||
- | st_is_valid(par_shp) | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Este bloco cria funções que permitem produzir gráficos esteticamente | ||
- | # caprichados para apresentar os índices de correlação de Pearson | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ---- | ||
- | # Parâmetros dos gráficos | ||
- | txt.size = 6 | ||
- | thm.size = (14/5) * txt.size | ||
- | |||
- | Tema <- theme( | ||
- | axis.line | ||
- | axis.text.x | ||
- | axis.title.y = element_blank(), | ||
- | axis.text.y | ||
- | axis.ticks | ||
- | legend.justification = c(1, 0), | ||
- | legend.position | ||
- | legend.text | ||
- | legend.title = element_blank(), | ||
- | panel.border | ||
- | panel.background = element_blank(), | ||
- | panel.grid.major = element_line(colour = " | ||
- | title = element_text(size = thm.size, colour=" | ||
- | plot.background = element_rect(colour = " | ||
- | ) | ||
- | |||
- | # Função para reordenamento da cormat (correlation matrix) | ||
- | reorder_cormat <- function(cormat){ | ||
- | # Use correlation between variables as distance | ||
- | dd <- as.dist((1-cormat)/ | ||
- | hc <- hclust(dd) | ||
- | cormat < | ||
- | } | ||
- | |||
- | # Função para definição do triângulo superior da cormat | ||
- | get_upper_tri <- function(cormat){ | ||
- | cormat[lower.tri(cormat)]< | ||
- | return(cormat) | ||
- | } | ||
- | |||
- | # Função para embelazamento da cormat | ||
- | if(!require(reshape2)) | ||
- | install.packages(" | ||
- | library(reshape2) | ||
- | graphCormat <- function(cormat){ | ||
- | # Resets font size for correlation matrix graph | ||
- | txt.size = 6 | ||
- | thm.size = (14/5) * txt.size | ||
- | upper_tri <- get_upper_tri(cormat) | ||
- | # Melt the correlation matrix | ||
- | melted_cormat <- melt(upper_tri, | ||
- | p <- ggplot(melted_cormat, | ||
- | geom_tile(color = " | ||
- | scale_fill_gradient2(low = " | ||
- | | ||
- | | ||
- | coord_fixed() + | ||
- | geom_text(aes(Var2, | ||
- | theme( | ||
- | axis.line | ||
- | axis.title.x = element_blank(), | ||
- | axis.text.x | ||
- | axis.title.y = element_blank(), | ||
- | axis.text.y | ||
- | axis.ticks | ||
- | legend.direction = " | ||
- | legend.justification = c(1, 0), | ||
- | legend.position | ||
- | legend.text | ||
- | panel.border | ||
- | panel.background = element_blank(), | ||
- | panel.grid.major = element_line(colour = " | ||
- | title = element_text(size = thm.size, colour=" | ||
- | plot.background = element_rect(colour = " | ||
- | ) + | ||
- | guides(fill = guide_colorbar(barwidth = 7, barheight = 1, | ||
- | | ||
- | return(p) | ||
- | } | ||
- | # ----- | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Estudo da correlação das métricas LiDAR com parâmetros de interesse | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ---- | ||
- | opt_filter(ctg) <- " | ||
- | |||
- | # Cálculo " | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | D <- plot_metrics(ctg, | ||
- | |||
- | # Escolhe um subgrupo de métricas e dados para estudo da correlação | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | X <- tibble(D) %>% select(VTCC, | ||
- | zq90, zq95, pzabovezmean, | ||
- | |||
- | # Prepara o gráfico para análise das correlações | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | cormat <- X %>% cor() | ||
- | cormat <- round(cor(cormat), | ||
- | p <- graphCormat(cormat) | ||
- | |||
- | grfDir <- str_c(wrkDir, | ||
- | |||
- | fileGrf <- paste0(grfDir, | ||
- | nomeGrf <- " | ||
- | jpeg(fileGrf, | ||
- | plot(p + labs(title=nomeGrf)) | ||
- | dev.off() | ||
- | |||
- | # Análise de regressão por quadrados mínimos ordinários (OLS) para | ||
- | # determinação do modelo de predição. | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | m <- lm(VTCC ~ zq90 + IDINV, data = X) | ||
- | summary(m) | ||
- | plot(X$VTCC, | ||
- | abline(0,1) | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Gera métricas para Área Total | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # É possível gerar uma função que calcula qualquer métrica desejada | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | metriLiDAR < | ||
- | if (length(z)< | ||
- | metris <- list( | ||
- | n <- length(z), | ||
- | zmean <- mean(z), | ||
- | zq90 <- quantile(z, 0.90), | ||
- | zq95 <- quantile(z, 0.95), | ||
- | zrelief | ||
- | zabvmean <- (length(z[z> | ||
- | ) | ||
- | names(metris) <- c(" | ||
- | " | ||
- | return(metris) | ||
- | } | ||
- | |||
- | # Aplica a função de métricas específicas em cada talhão separadamente | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | prjNam <- " | ||
- | wrkDir <- str_c(' | ||
- | lidDir <- str_c(wrkDir, | ||
- | ctgDir <- str_c(lidDir, | ||
- | |||
- | arq1a <- paste0(lidDir, | ||
- | arq1d <- paste0(lidDir, | ||
- | arq2a <- paste0(lidDir, | ||
- | arq2c <- paste0(lidDir, | ||
- | |||
- | las <- readLAS(arq1a) | ||
- | d1a <- hexagon_metrics(las, | ||
- | plot(d1a, pal = heat.colors, | ||
- | |||
- | las <- readLAS(arq1d) | ||
- | d1d <- hexagon_metrics(las, | ||
- | plot(d1d, pal = heat.colors, | ||
- | |||
- | las <- readLAS(arq2a) | ||
- | d2a <- hexagon_metrics(las, | ||
- | plot(d2a, pal = heat.colors, | ||
- | |||
- | las <- readLAS(arq2c) | ||
- | d2c <- hexagon_metrics(las, | ||
- | plot(d2c, pal = heat.colors, | ||
- | # ---- | ||
- | |||
- | |||
- | |||
- | # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
- | # AGORA É SUA VEZ | ||
- | # ESTUDO DIRIGIDO ... | ||
- | # PRODUZA O MAPA DE ESTIMATIVAS DE VOLUME | ||
- | # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
- | |||
- | |||
- | |||
- | |||
- | # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
- | # O BLOCO A SEGUIR SERÁ UTIL SE QUISER " | ||
- | # CALCULA AS INFORMAÇÕES NECESSÁRIAS PARA GERAR O QUADRO | ||
- | # DE COMPARAÇÃO ENTRE ACS, ACE E AD !! | ||
- | # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----- | ||
- | |||
- | # Funções para a | ||
- | # Amostragem dupla | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | doubleSampleRegPars = function(y, x, xLarge, alpha=.05){ | ||
- | n = length(y) | ||
- | beta = ( sum(y*x, na.rm=T) - ( sum(x, na.rm=T)*sum(y, | ||
- | / ( sum(x^2, na.rm=T) - (sum(x, na.rm=T)^2 / n) ) | ||
- | | ||
- | rho = cor(y,x) | ||
- | N = length(xLarge) | ||
- | | ||
- | ydsr = mean(y, na.rm=T) + beta * ( mean(xLarge, | ||
- | vardsr = (var(y, na.rm=T)/ | ||
- | stderr = sqrt(vardsr) | ||
- | ci = calcCI(stderr, | ||
- | | ||
- | out = c(media = ydsr, var = vardsr, dp = stderr, ic = ci, erro = 100*ci/ | ||
- | | ||
- | return(out) | ||
- | } | ||
- | |||
- | # Função para determinação da quantidade ideal de parcelas amostrais, | ||
- | # isto é, da intensidade amostral que gera erro admissível | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | dubleSamplePlotNumber = function(y, x, xLarge, Cpg = 300, | ||
- | | ||
- | | ||
- | rho = cor(x,y) | ||
- | a = var(y) * (1 - rho^2) | ||
- | b = var(y) * rho^2 | ||
- | | ||
- | B = errDesired * mean(y) | ||
- | qt = qt(1 - alpha/2, length(y)-1) | ||
- | | ||
- | nG = (sqrt( a*b*Cpg ) + b) / (B^2 / qt^2) | ||
- | nP = (sqrt( a*b/Cpg ) + a) / (B^2 / qt^2) | ||
- | | ||
- | return(nP) | ||
- | } | ||
- | |||
- | |||
- | spatialPlotMetrics | ||
- | mutate(VTCC = ifelse(VTCC <50, VTCC*10, | ||
- | |||
- | lims = spatialPlotMetrics %>% names %in% c(' | ||
- | lidarOnly = spatialPlotMetrics[, | ||
- | |||
- | interestVars = c(' | ||
- | corrMat = cor(spatialPlotMetrics[, | ||
- | corrMat = corrMat[, | ||
- | |||
- | handPick = c(' | ||
- | vars = c(' | ||
- | handp = as.data.frame(cbind(vars, | ||
- | doubleSamplePars = foreach(i = interestVars, | ||
- | aux = corrMat[i,] | ||
- | #pick = which( aux == max(aux) ) %>% names | ||
- | pick = handp$handPick[vars == i] | ||
- | XL = metrics[, | ||
- | | ||
- | est = doubleSampleRegPars(spatialPlotMetrics[, | ||
- | spatialPlotMetrics[, | ||
- | #est = doubleSampleRatioPars(spatialPlotMetrics[, | ||
- | names(est) = i | ||
- | | ||
- | est %<>% t %>% as.data.frame | ||
- | est$aux = pick | ||
- | | ||
- | return(est) | ||
- | } | ||
- | |||
- | doubleSamplePars <- doubleSamplePars %>% select(-rho) %>% t() | ||
- | |||
- | doubleSamplePars %>% | ||
- | kbl(caption = " | ||
- | kable_classic(full_width = F) | ||
- | |||
- | # Gráfico para análise da precisão dos métodos amostrais | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | erro = 1:20 | ||
- | scsPlotn <- tamanhoIdealACS(parcelas$VTCC, | ||
- | errDesired = erro/100) | ||
- | tamanhoIdealACE(y = parcelas$VTCC, | ||
- | g = parcelas$IDINV, | ||
- | Nh = parcPorEstrato, | ||
- | erro/100) | ||
- | |||
- | cssPlotn <- tamanhoIdealACE(parcelas$VTCC, | ||
- | errDesired = erro/100) | ||
- | |||
- | dsPlotn = dubleSamplePlotNumber(spatialPlotMetrics$VTCC, | ||
- | spatialPlotMetrics$zq99, | ||
- | metrics$zq99, | ||
- | |||
- | png(' | ||
- | plot( scsPlotn ~ erro, type=' | ||
- | ylim=c(0, | ||
- | axes=F) | ||
- | lines(erro, cssPlotn, col=' | ||
- | lines(erro, dsPlotn, col=' | ||
- | box() | ||
- | axis(1) | ||
- | axis(2, at = c(25, 50, 75, 100, 125, 150, 175, 200)) | ||
- | abline(v=10, | ||
- | lines(c(0, | ||
- | lines(c(0, | ||
- | lines(c(0, | ||
- | legend(' | ||
- | | ||
- | dev.off() | ||
- | |||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # Este script foi atualizado em Novembro/ | ||
- | # na seguinte sequência, as mais recentes versões do pacote lidR*: | ||
- | # | ||
- | # | ||
- | # | ||
- | # | ||
- | # * lidR latest development version | ||
- | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | # ---- | ||
- | </ | ||
- | |||
- | ---- | ||
- | Referências sobre o pacote //lidR// para processamento de dados LiDAR: | ||
- | |||
- | * [[https:// | ||
- | * [[https:// | ||
- | * [[https:// | ||
- | * [[https:// |
lidar/projetos/rcode_alsmodelo.1701081290.txt.gz · Última modificação: 2024/03/23 20:17 (edição externa)