This tool interpolates a canopy-height model grid from one or more input LAS files. The LAS file format is an industry standard format for storing data acquired by laser scanners. The canopy height is estimated by differencing the maximum non-ground point height within the circle encompassing each grid cell from the ground elevation estimate for the cell. Ground points are distinguished from off-terrain points (largely vegetation) using the same method as the Bare-Earth DEM (LiDAR), which is based on a maximum allowable inter-point slope for ground points. It is therefore possible to derive the canopy model for any LAS file, even those that do not contain information about the point return.
The user must specify the name of one or more LAS files. The canopy-height models will have the same name as the corresponding input LAS file, with specified file suffix appended to the end of the file name. The user must also specify the grid resolution, the minimum canopy height (all cells with a height below this value will be assigned NoData), and the inter-point slope threshold. All points that have an inter-point slope with any neighbouring point, and is located above the corresponding slope, is considered to be a non-ground point (vegetation). An appropriate value of this parameter will depend on the steepness of the terrain, but generally values of 15-35 degrees produce satisfactory results.
The following is an example of a Python script using this tool:
wd = pluginHost.getWorkingDirectory()
# You may have multiple input files but they must
# be separated by semicolons in the string.
inputs = wd + "input1.las" + ";" + wd + "input2.las" + ";" + wd + "input3.las"
suffix = "canopy"
resolution = "1.0"
minHeight = "2.0"
maxSlope = "20.0"
args = [inputs, suffix, resolution, minHeight, maxSlope]
pluginHost.runPlugin("LiDAR_CanopyModel", args, False)
This is a Groovy script also using this tool:
def wd = pluginHost.getWorkingDirectory()
// You may have multiple input files but they must
// be separated by semicolons in the string.
def inputs = wd + "input1.las" + ";" + wd + "input2.las" + ";" + wd + "input3.las"
def suffix = "canopy"
def resolution = "1.0"
def minHeight = "2.0"
def maxSlope = "20.0"
def args = [inputs, suffix, resolution, minHeight, maxSlope]
pluginHost.runPlugin("LiDAR_CanopyModel", args, false)