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:// | ||
