Classify LAS By Height (3D Analyst)

Summary

Reclassifies lidar points based on their height from the ground surface.

Usage

  • This tool reclassifies LAS points with class code values of 0 or 1 based on their height from a ground surface. The ground surface can be sourced from the LAS points or a separate raster layer. Ground classified LAS datasets are required when using a ground sourced from the LAS points. The ground classified points with values of 2, 8, or both 2 and 8 can be used. The American Society for Photogrammetry and Remote Sensing (ASPRS) defines the LAS format specifications with a definition for class code that assigns 2 for ground and 8 for model key in LAS versions earlier than 1.4. Model key classification was traditionally used to identify a subset of ground points. At LAS version 1.4, the model key designation was made into a classification flag that can be applied to any class code, and the definition for a class code value of 8 was reserved for later use.

  • If the LAS data does not have any ground classified points, but ground points are available, use the Classify LAS Ground tool. If the ground points use values other than 2 or 8, use the Change LAS Class Codes tool to reclassify the ground points accordingly.

  • Classifying points using height gradients from the ground surface can provide a useful way to visualize and filter the point cloud, which can also aid the process of conducting more refined interactive classification. The tool defaults to classifying class codes 3, 4, and 5, which represent low, medium, and high vegetation in the ASPRS specification for the LAS format.

  • Consider applying a processing extent to review the appropriateness of the designated z-range values on a subset of LAS points. Once the reclassified region is satisfactory, it can then be applied to a larger extent.

  • A custom raster surface can be helpful when ground classified points are not available but height-based classification is desired, such as a point cloud of a building interior or cave.

Parameters

LabelExplanationData Type
Input LAS Dataset

The LAS dataset that will be processed. Only LAS points with class code values of 0 and 1 will be evaluated.

LAS Dataset Layer
Ground Source

Specifies the source of ground measurements that will be used to determine height above ground.

  • All Ground PointsLAS points designated with the ground classification code value of 2 and model key code value of 8 will be used.
  • Model Key PointsOnly LAS points designated with the model key classification code value of 8 will be used.
  • Raster SurfaceThe ground height will be based on a raster surface
String
Height Classification

The class code and maximum height from ground that will be used to reclassify LAS points. The order of the classes in the table will define the range of z-values that will be used to process the reclassification. The z-range of the first entry will span from the ground surface to the specified Height From Ground value. The z-range of subsequent entries will span from the upper limit of the preceding entry to its own Height From Ground value.

Value Table
Noise Classification
(Optional)

Specifies whether and how points will be reclassified as noise based on their proximity from the ground. Noise artifacts in lidar data can be introduced by sensor errors and the inadvertent interception of aerial obstructions, such as birds, in the path of the lidar pulse.

  • Low and High NoiseBoth low and high noise will be classified.
  • High NoiseOnly points that are above the maximum height in the LAS classification table will be reclassified as high noise.
  • Low NoiseOnly points below the ground surface will be reclassified as noise. This option is only available when all ground points are used to define the ground surface.
  • NoneNo points will be reclassified as noise.
String
Compute statistics
(Optional)

Specifies whether statistics will be computed for the .las files referenced by the LAS dataset. Computing statistics provides a spatial index for each .las file, which improves analysis and display performance. Statistics also enhance the filtering and symbology experience by limiting the display of LAS attributes, such as classification codes and return information, to values that are present in the .las file.

  • Checked—Statistics will be computed. This is the default.
  • Unchecked—Statistics will not be computed.
Boolean
Processing Extent
(Optional)

The extent of the data that will be evaluated.

  • Current Display Extent Map View—The extent will be based on the active map or scene.
  • Draw Extent Square and Finish—The extent will be based on a rectangle drawn on the map or scene.
  • Extent of a Layer Layer—The extent will be based on an active map layer. Choose an available layer or use the Extent of data in all layers option. Each map layer has the following options:

    • All Features Select All—The extent of all features.
    • Selected Features Area from Selected Features—The extent of the selected features.
    • Visible Features Extent Indicator—The extent of visible features.

  • Browse Browse—The extent will be based on a dataset.
  • Intersection of Inputs Intersect—The extent will be the intersecting extent of all inputs.
  • Union of Inputs Union—The extent will be the combined extent of all inputs.
  • Clipboard Paste—The extent can be copied to and from the clipboard.
    • Copy Extent Copy—Copies the extent and coordinate system to the clipboard.
    • Paste Extent Paste—Pastes the extent and coordinate system from the clipboard. If the clipboard does not include a coordinate system, the extent will use the map’s coordinate system.
  • Reset Extent Reset—The extent will be reset to the default value.

When coordinates are manually provided, the coordinates must be numeric values and in the active map's coordinate system. The map may use different display units than the provided coordinates. Use a negative value sign for south and west coordinates.

Extent
Process entire LAS files that intersect extent
(Optional)

Specifies how the processing extent will be applied.

  • Unchecked—Only LAS points that are within the processing extent will be evaluated. This is the default.
  • Checked—All points in the .las files that intersect the processing extent will be evaluated.
Boolean
Processing Boundary

A polygon feature that defines the region where LAS ground points will be evaluated.

Feature Layer
Update pyramid
(Optional)

Specifies whether the LAS dataset pyramid will be updated after the class codes are modified.

  • Checked—The LAS dataset pyramid will be updated. This is the default.
  • Unchecked—The LAS dataset pyramid will not be updated.
Boolean
Input Raster Surface
(Optional)

The raster layer that will provide the source for ground height values. This parameter is only used when the Ground Source parameter is set to Raster Surface.

Raster Layer

Derived Output

LabelExplanationData Type
Updated Input LAS Dataset

The LAS dataset that was modified.

LAS Dataset Layer

arcpy.ddd.ClassifyLasByHeight(in_las_dataset, ground_source, height_classification, {noise}, {compute_stats}, {extent}, {process_entire_files}, boundary, {update_pyramid}, {in_surface})
NameExplanationData Type
in_las_dataset

The LAS dataset that will be processed. Only LAS points with class code values of 0 and 1 will be evaluated.

LAS Dataset Layer
ground_source

Specifies the source of ground measurements that will be used to determine height above ground.

  • GROUNDLAS points designated with the ground classification code value of 2 and model key code value of 8 will be used.
  • MODEL_KEYOnly LAS points designated with the model key classification code value of 8 will be used.
  • SURFACEThe ground height will be based on a raster surface
String
height_classification
[[class_code, height_from_ground],...]

The class code value that will be assigned to LAS points that fall within the range of values derived from the specified height from ground. The order of entry influences the height ranges that will be used to define the reclassification of LAS points. The z-range of the first entry will span from the ground surface to the specified height_from_ground value. The z-range of subsequent entries will span from the upper limit of the preceding entry to its own height_from_ground value.

Value Table
noise
(Optional)

Specifies whether and how points will be reclassified as noise based on their proximity from the ground. Noise artifacts in lidar data can be introduced by sensor errors and the inadvertent interception of aerial obstructions, such as birds, in the path of the lidar pulse.

  • ALL_NOISEBoth low and high noise will be classified.
  • HIGH_NOISEOnly points that are above the maximum height in the LAS classification table will be reclassified as high noise.
  • LOW_NOISEOnly points below the ground surface will be reclassified as noise. This option is only available when all ground points are used to define the ground surface.
  • NONENo points will be reclassified as noise.
String
compute_stats
(Optional)

Specifies whether statistics will be computed for the .las files referenced by the LAS dataset. Computing statistics provides a spatial index for each .las file, which improves analysis and display performance. Statistics also enhance the filtering and symbology experience by limiting the display of LAS attributes, such as classification codes and return information, to values that are present in the .las file.

  • COMPUTE_STATSStatistics will be computed. This is the default.
  • NO_COMPUTE_STATSStatistics will not be computed.
Boolean
extent
(Optional)

The extent of the data that will be evaluated.

  • MAXOF—The maximum extent of all inputs will be used.
  • MINOF—The minimum area common to all inputs will be used.
  • DISPLAY—The extent is equal to the visible display.
  • Layer name—The extent of the specified layer will be used.
  • Extent object—The extent of the specified object will be used.
  • Space delimited string of coordinates—The extent of the specified string will be used. Coordinates are expressed in the order of x-min, y-min, x-max, y-max.
Extent
process_entire_files
(Optional)

Specifies how the processing extent will be applied.

  • PROCESS_EXTENTOnly LAS points that are within the processing extent will be evaluated. This is the default.
  • PROCESS_ENTIRE_FILESAll points in the .las files that intersect the processing extent will be evaluated.
Boolean
boundary

A polygon feature that defines the region where LAS ground points will be evaluated.

Feature Layer
update_pyramid
(Optional)

Specifies whether the LAS dataset pyramid will be updated after the class codes are modified.

  • UPDATE_PYRAMIDThe LAS dataset pyramid will be updated. This is the default.
  • NO_UPDATE_PYRAMIDThe LAS dataset pyramid will not be updated.
Boolean
in_surface
(Optional)

The raster layer that will provide the source for ground height values. This parameter is only used when the ground_source parameter is set to SURFACE.

Raster Layer

Derived Output

NameExplanationData Type
out_las_dataset

The LAS dataset that was modified.

LAS Dataset Layer

Code sample

ClassifyLasByHeight example 1 (Python window)

The following sample demonstrates the use of this tool in the Python window:

arcpy.env.workspace = 'C:/data'
arcpy.ddd.ClassifyLasByHeight('lidar.lasd', 'Ground', 
                             [[3, 5], [4, 17], [5, 120]], 'HIGH_NOISE')
ClassifyLasByHeight example 2 (stand-alone script)

The following sample demonstrates the use of this tool in a stand-alone Python script:

'''****************************************************************************
Name:        Classify Vegetation Points
Description: Classify points representing vegetation with LAS class code values
             of 3, 4, and 5. The code is designed for use as a script tool.
****************************************************************************'''
# Import system modules
import arcpy
import exceptions, sys, traceback

# Set Local Variables
inLas = arcpy.GetParameterAsText(0)
recursion = arcpy.GetParameterAsText(1)
lasd = arcpy.GetParameterAsText(2)
extent = arcpy.GetParameter(3)
calcStats = arcpy.GetParameter(4)

try:
    # Execute CreateLasDataset
    arcpy.management.CreateLasDataset(inLas, lasd, folder_recursion=recursion)
    # Execute ChangeLasClassCodes
    arcpy.ddd.ClassifyLasByHeight(lasd, ground_source='GROUND', 
                                  height_classification=[[3, 5], 
                                                         [4, 17], 
                                                         [5, 120]], 
                                  noise='ALL_NOISE', compute_stats=calcStats, 
                                  extent=extent)

except arcpy.ExecuteError:
    print(arcpy.GetMessages())

Related topics