lidar:projetos:rcode_invdrone
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Próxima revisão | Revisão anterior | ||
lidar:projetos:rcode_invdrone [2022/06/13 13:27] – criada lcer | lidar:projetos:rcode_invdrone [2024/03/23 20:17] (atual) – edição externa 127.0.0.1 | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | [[ lidar: | ||
+ | < | ||
+ | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | # Processamento de dados LiDAR ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | # | ||
+ | # Autor: Humberto Menecheli | ||
+ | # Departamento de Ciências Florestais | ||
+ | # ESALQ/USP - 09/Jun/2022 | ||
+ | # | ||
+ | # Processa nuvens LiDAR (plantio/ | ||
+ | # | ||
+ | # Linguagem de programação: | ||
+ | # R (v 4.2) | ||
+ | # | ||
+ | # | ||
+ | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | rm(list=ls(all=TRUE)) | ||
+ | gc() | ||
+ | |||
+ | # Carrega pacotes lidR e terra | ||
+ | require(lidR); | ||
+ | |||
+ | # Define diretório de trabalho ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | lidarDir< | ||
+ | |||
+ | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | # ESTUDO DA NUVEM de pontos LiDAR obtidos abaixo da copa em parcela | ||
+ | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | lidarPar <- " | ||
+ | |||
+ | # Define nome completo do aquivo com a nuvem LiDAR da parcela ~~~~~~~~~ | ||
+ | parcelArq <- paste0(lidarDir, | ||
+ | |||
+ | # Leitura parcial dos dados LiDAR ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | par1 <- readLAS(parcelArq, | ||
+ | select = " | ||
+ | print(par1@data) | ||
+ | summary(par1@data) | ||
+ | |||
+ | # A nuvem de pontos pertence a uma parcela circular com área de 400m2. | ||
+ | # Para conferir o perímetro dessa parcela, vamos plotar alguns pontos | ||
+ | # nessa borda. Primeiramente, | ||
+ | # coordenadas na borda de um círculo com centro e raio conhecidos. | ||
+ | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | borda <- function(x_centro, | ||
+ | angulo <- seq(0, 2 * pi, length = n_pontos) | ||
+ | x <- raio * cos(angulo) + x_centro | ||
+ | y <- raio * sin(angulo) + y_centro | ||
+ | pontos <- cbind(x, y) | ||
+ | return(pontos) | ||
+ | } | ||
+ | |||
+ | # Cálculo do centro da parcela ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | xcentral <- round(mean(par1@data$X), | ||
+ | ycentral <- round(mean(par1@data$Y), | ||
+ | |||
+ | # Uso da função borda para gerar as coordenadas de 20 pontos no | ||
+ | # perímetro da parcela círcular de área igual a 400 m2, | ||
+ | # ou seja, raio =~ 11.18 m2 | ||
+ | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | raio <- 11.18 | ||
+ | coord <- borda(xcentral, | ||
+ | |||
+ | # Inclusão das coordenadas do ponto central ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | coord <- rbind(coord, | ||
+ | |||
+ | # A função vect(), do pacote " | ||
+ | # para as coordenadas geradas. Definiremos como CRS dessas coordenadas, | ||
+ | # o mesmo atribuído originalmente à nuvem de pontos (EPSG: | ||
+ | crsNuvem <- par1@crs$input | ||
+ | pts <- vect(coord, type=" | ||
+ | |||
+ | # As coordenadas podem agora ser plotadas em um mapa 2D do pacote terra | ||
+ | terra:: | ||
+ | |||
+ | # A nuvem de pontos original pode ser " | ||
+ | # com a função decimate_points() e exibida como um plot 3D | ||
+ | parDesb | ||
+ | parDesb3D <- plot(parDesb, | ||
+ | color = " | ||
+ | bg = " | ||
+ | |||
+ | # As 21 coordenadas definidas para demarcar o perímetro e o centro | ||
+ | # da parcela podem ser exibidas a uma certa altura no mesmo plot 3D. | ||
+ | # Para isso, definimos essa altura (p.ex.: 35m) como um atributo em um | ||
+ | # data-frame de uma única coluna " | ||
+ | alturas <- data.frame(H=rep(c(35), | ||
+ | |||
+ | # ... incluímos essas alturas como atributo das coordenadas, | ||
+ | # e recriamos o objeto espacial que as representa no formato sf | ||
+ | pts <- sf:: | ||
+ | | ||
+ | | ||
+ | crs = crsNuvem) | ||
+ | ) | ||
+ | # ... para, então, acrescentá-las no plot 3D | ||
+ | add_treetops3d(parDesb3D, | ||
+ | |||
+ | |||
+ | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | # ESTUDO DA NUVEM DE PONTOS gerada por sobrevoo LiDAR acima DO PLANTIO | ||
+ | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | lidarPla <- " | ||
+ | |||
+ | # Define nome completo do aquivo com a nuvem LiDAR do plantio ~~~~~~~~~ | ||
+ | plntioArq <- paste0(lidarDir, | ||
+ | |||
+ | # Leitura parcial dos dados LiDAR ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | pla <- readLAS(plntioArq, | ||
+ | print(pla@data) | ||
+ | summary(pla@data) | ||
+ | |||
+ | # Clipa parcela circular de 400 m2 de dentro da nuvem do plantio ~~~~~~ | ||
+ | par2 <- clip_circle(pla, | ||
+ | |||
+ | # Plot da parcela colorida por classificação ~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | parPlantio <- plot(par2, | ||
+ | | ||
+ | | ||
+ | | ||
+ | # Inclusão das esferas delimitadoras na parcela extraída do plantio ~~~ | ||
+ | add_treetops3d(parPlantio, | ||
+ | |||
+ | # Plot da nuvem desbastada de pontos do plantio ~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | plaDesb | ||
+ | plaDesb3D <- plot(plaDesb, | ||
+ | color = " | ||
+ | bg = " | ||
+ | # Inclusão das esferas delimitadoras no plantio ~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | add_treetops3d(plaDesb3D, | ||
+ | |||
+ | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | # Este script foi criado em Junho/2022 depois de instalar as mais | ||
+ | # recentes versões dos pacotes lidR, sf, raster e terra nessa data. | ||
+ | # | ||
+ | # * lidR latest development version: sequência de instalação de pacotes | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | Referências sobre o pacote //lidR// para processamento de dados LiDAR: | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | e sobre os pacotes //terra// e //sf// para processamento de dados espaciais: | ||
+ | * [[https:// | ||
+ | * [[https:// |