4 votos

¿Usando lidR para contar el número de retornos de pulso a diferentes intervalos?

Estoy tratando de obtener el número de pulso en diferentes intervalos de altura.

He usado el paquete lidR para hacer esto antes con el siguiente código, pero parece que la actualización reciente en el paquete rompe mi código. Mi error principal es que cuando ejecuto la función aparece un error que dice the ScanAngle and PulseID no longer exist . ¿Alguna ayuda sobre qué función debo usar ahora?

El siguiente código solía funcionar:

 # the number of points is computed.
grid_metrics3d(lidar1, length(Z),res = 0.5)

# Cloud of points is voxelized with a 1-meter resolution and in each voxel
# the mean scan angle of points is computed.
grid_metrics3d(lidar1, mean(Angle),res = 0.5)

# Define your own metric function
myMetrics = function(i, ScanAngleRank, PointSourceID)
{
  ret = list(
   npulse  = length(unique(PointSourceID)),
   angle   = mean(ScanAngleRank),
   imean   = mean(i))

   return(ret)
}

voxels1 = grid_metrics3d(lidar1, myMetrics(Intensity, ScanAngle, PointID ),res = 0.5)
plot(voxels1)
 

3voto

Andrey Atapin Puntos 384

Eran casi de allí. Te perdiste para calcular el pulseID con laspulse() y te perdiste de que el ángulo de la exploración se almacena en ScanAngleRank

Desde lidR 2.0.0 pulseID está ya calculada en el momento de la lectura. Y desde rlas 1.3.0 que introdujo la compatibilidad de LAS 1.4 formato el atributo ScanAngle ahora ScanAngleRank. El nombre ScanAngle está reservado para el ángulo almacenados en LAS 1.4 formato. Esta última modificación se conoce a romper el ex códigos como la suya, pero era necesario para que se ajuste mejor con LAS especificaciones

LASfile <- system.file("extdata", "Megaplot.laz", package="lidR")
las = readLAS(LASfile)
las = laspulse(las)

myMetrics = function(I, A, ID)
{
  ret = list(
    npulse  = length(unique(ID)),
    angle   = mean(A),
    imean   = mean(I))

  return(ret)
}

voxels1 = grid_metrics3d(las, ~myMetrics(Z, ScanAngleRank, pulseID), res = 10)
plot(voxels1, "npulse")

Observe también que PointSourceID no está relacionada con su pregunta. PointSourceID normalmente, los registros de un número de IDENTIFICACIÓN para cada flightline

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X