Predefined standard metrics functions

Predefined functions usable in grid_metrics, grid_hexametrics, lasmetrics, tree_metrics, and their convenient shortcuts. The philosophy of the lidR package is to provide an easy way to compute user-defined metrics rather than to provide them. However, for efficiency and to save time, a set of standard metrics has been predefined. To use these functions please read the details and examples sections.

stdmetrics(x, y, z, i, a, rn, class, dz = 1, th = 2)


stdmetrics_z(z, dz = 1, th = 2)


stdmetrics_i(i, z = NULL, class = NULL, rn = NULL)


stdmetrics_rn(rn, class = NULL)


stdmetrics_pulse(pulseID, rn)


stdmetrics_ctrl(x, y, z, a)


stdtreemetrics(x, y, z)


x, y, z, i, a

Coordinates of the points, Intensity and ScanAngle

rn, class

ReturnNumber, Classification


numeric. Layer thickness metric entropy


numeric. Threshold for metrics pzabovex. Can be a vector to compute with several thresholds.


The number referencing each pulse


The function names, their parameters and the output names of the metrics rely on a nomenclature chosen for brevity:

  • z: refers to the elevation

  • i: refers to the intensity

  • rn: refers to the return number

  • q: refers to quantile

  • a: refers to the ScanAngle

  • n: refers to a number (a count)

  • p: refers to a percentage

For example the metric named zq60 refers to the elevation, quantile, 60 i.e. the 60th percentile of elevations. The metric pground refers to a percentage. It is the percentage of points classified as ground. The function stdmetric_i refers to metrics of intensity. A description of each existing metric can be found on the lidR wiki page. Some functions have optional parameters. If these parameters are not provided the function computes only a subset of existing metrics. For example, stdmetrics_i requires the intensity values, but if the elevation values are also provided it can compute additional metrics such as cumulative intensity at a given percentile of height. Each function has a convenient associated variable. It is the name of the function, with a dot before the name. This enables the function to be used without writing parameters. The cost of such a feature is inflexibility. It corresponds to a predefined behavior (see examples) stdtreemetrics is a special function that works with tree_metrics. Actually, it won't fail with other functions but the output makes more sense if computed at the individual tree level.


An object of class formula of length 2.

See Also

grid_metrics lasmetrics grid_hexametrics grid_metrics3d tree_metrics

  • stdmetrics
  • .stdmetrics
  • stdmetrics_z
  • .stdmetrics_z
  • stdmetrics_i
  • .stdmetrics_i
  • stdmetrics_rn
  • .stdmetrics_rn
  • stdmetrics_pulse
  • .stdmetrics_pulse
  • stdmetrics_ctrl
  • .stdmetrics_ctrl
  • stdtreemetrics
  • .stdtreemetrics
LASfile <- system.file("extdata", "Megaplot.laz", package="lidR")
las = readLAS(LASfile, select = "*")

# All the predefined metrics
m1 = grid_metrics(las, stdmetrics(X,Y,Z,Intensity,ScanAngle,ReturnNumber,Classification,dz=1))

# Convenient shortcut
m2 = grid_metrics(las, .stdmetrics)

# Basic metrics from intensities
m3 = grid_metrics(las, stdmetrics_i(Intensity))

# All the metrics from intensities
m4 = grid_metrics(las, stdmetrics_i(Intensity, Z, Classification, ReturnNumber))

# Convenient shortcut for the previous example
m5 = grid_metrics(las, .stdmetrics_i)

# Compute the metrics only on first return
first = lasfilterfirst(las)
m6 = grid_metrics(first, .stdmetrics_z)

# Compute the metrics with a threshold at 2 meters
over2 = lasfilter(las, Z > 2)
m7 = grid_metrics(over2, .stdmetrics_z)

# Works also with lasmetrics and grid_hexametrics
m8 = lasmetrics(las, .stdmetrics)
m9 = grid_hexametrics(las, .stdmetrics)

# Combine some predefined function with your own new metrics
# Here convenient shortcuts are no longer usable.
myMetrics = function(z, i, rn)
  first  = rn == 1L
  zfirst = z[first]
  nfirst = length(zfirst)
  above2 = sum(z > 2)

  x = above2/nfirst*100

  # User's metrics
  metrics = list(
     above2aboven1st = x,       # Num of returns above 2 divided by num of 1st returns
     zimean  = mean(z*i),       # Mean products of z by intensity
     zsqmean = sqrt(mean(z^2))  # Quadratic mean of z

  # Combined with standard metrics
  return( c(metrics, stdmetrics_z(z)) )

m10 = grid_metrics(las, myMetrics(Z, Intensity, ReturnNumber))

# Users can write their own convenient shorcuts like this:
.myMetrics = ~myMetrics(Z, Intensity, ReturnNumber)

m11 = grid_metrics(las, .myMetrics)
# }
Documentation reproduced from package lidR, version 2.0.0, License: GPL-3

Community examples

Looks like there are no examples yet.