Classify LAS Ground (3D Analyst)

Summary

Classifies ground points from LAS data.

Illustration

Classify LAS Ground tool illustration

Usage

  • This tool requires the input LAS dataset to have a projected coordinate system. Data stored in a geographic coordinate system can be reprojected using the Extract LAS tool with a projected coordinate system specified in the Output Coordinate System environment setting.

  • Only LAS points with class code values of 0, 1, or 2 can be assigned as ground points. If the LAS files use different class code values to represent unclassified or ground measurements, use the Change LAS Class Codes tool to reassign them accordingly. The classification process also ignores points assigned with the overlap or withheld classification flags.

  • You can use the DEM Resolution parameter to generate faster results if the ground classified points will be used to generate a ground raster surface at a specific resolution. The performance gain is achieved by reducing the number of points assigned to the ground class code while maintaining the coverage necessary for the specified resolution.

  • When classifying LAS returns over a terrain with divergent slope characteristics, such as relatively flat areas alongside locations with steep slope profiles, consider running the tool once with the standard method and a second time with the aggressive detection method and the reuse ground parameter enabled. Apply a processing extent or specify a polygon boundary to limit this operation to only the region that is needed.

  • Review locations with bridges and freeway on-ramps, as they may be misclassified as ground.

Parameters

LabelExplanationData Type
Input LAS Dataset

The LAS dataset that will be processed. Only the last return of LAS points with class code values of 0, 1, and 2 will be evaluated.

LAS Dataset Layer
Ground Detection Method

Specifies the method that will be used to detect ground points.

  • Standard ClassificationThis method has a tolerance for slope variation that allows it to capture gradual undulations in the ground's topography that would typically be missed by the conservative option but not capture the type of sharp reliefs that would be captured by the aggressive option. This is the default.
  • Conservative Classification When compared to other options, this method uses a tighter restriction on the variation of the ground's slope that allows it to differentiate the ground from low-lying vegetation such as grass and shrubbery. It is best suited for topography with minimal curvature.
  • Aggressive Classification This method detects ground areas with sharper reliefs, such as ridges and hill tops, that may be ignored by the standard option. This method is best used in a second iteration of this tool with the Reuse existing ground parameter checked. Avoid using this method in urban areas or flat, rural areas, as it may result in the misclassification of taller objects—such as utility towers, vegetation, and portions of buildings—as ground.
  • Standard ClassificationThis method has a tolerance for slope variation that allows it to capture gradual undulations in the ground's topography that would typically be missed by the conservative option but not capture the type of sharp reliefs that would be captured by the aggressive option. This is the default.
  • Conservative Classification When compared to other options, this method uses a tighter restriction on the variation of the ground's slope that allows it to differentiate the ground from low-lying vegetation such as grass and shrubbery. It is best suited for topography with minimal curvature.
  • Aggressive ClassificationThis method detects ground areas with sharper reliefs, such as ridges and hill tops, that may be ignored by the standard option. This method is best used in a second iteration of this tool with the reuse_ground parameter set to REUSE_GROUND. Avoid using this method in urban areas or flat, rural areas, as it may result in the misclassification of taller objects—such as utility towers, vegetation, and portions of buildings—as ground.
String
Reuse existing ground
(Optional)

Specifies whether existing ground points will be reclassified or reused.

  • Unchecked—Existing ground points will be reclassified. Points that are not found to be a part of the ground will be reassigned a class code value of 1, which represents unclassified points. This is the default.
  • Checked—Existing ground points will be accepted and reused without scrutiny and contribute to the determination of unclassified points.
Boolean
DEM Resolution
(Optional)

A distance that will result in only a subset of points being evaluated for classification as ground, making the process faster. Consider using this parameter when a faster method for generating a DEM surface is needed. The minimum distance is 0.3 meters, but the provided distance must be at least 1.5 times the average point spacing of the lidar data for this process to take effect.

Linear Unit
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 Current Display Extent—The extent will be based on the active map or scene. This option is only available when there is an active map.
  • Draw Extent Draw Extent—The extent will be based on a rectangle drawn on the map or scene. This option will create a feature class in the project geodatabase and add a layer to the map. The feature class will have the same coordinate system as the map.
    Note:

    This option is not available in the Environments dialog box. It is only available from a tool parameter with an extent data type or from the Environments tab on a tool dialog box.

    Note:

    When the Enable and disable editing from the Edit tab editing option is checked, you must enable editing on the Edit ribbon tab to draw the extent.

  • Extent of a Layer Layer—The extent will be based on an active map layer. Use the drop-down list to choose an available layer or use the Extent of data in all layers option to get the combined extent of all active map layers, excluding the basemap. This option is only available when there is an active map with layers.

    Each map layer has the following options:

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

      The extents from the Selected Features Area from Selected Features and Visible Features Extent Indicator options are only available for feature layers.

  • Browse Browse—The extent will be based on an existing dataset.
  • Intersection of Inputs Intersect—The extent will be based on the minimum or intersecting extent of all inputs. If no inputs overlap, a null extent with all zeros will result.
  • Union of Inputs Union—The extent will be based on the maximum or combined extent of all inputs.
  • Clipboard Paste—The extent can be copied to and from the clipboard.
    • Copy Extent Copy—Copies the extent coordinates and coordinate system to the clipboard.
    • Paste Extent Paste—Pastes the extent coordinates and, optionally, the coordinate system from the clipboard. If the clipboard values do not include a coordinate system, the extent will use the map’s coordinate system.
    Note:

    The extent coordinates are copied to and pasted from the clipboard using the same formatting and order as the ArcPy Extent object: x-min, y-min, x-max, y-max, and the spatial reference.

  • Reset Extent Reset—The extent will be reset to the default value.
  • Manually entered coordinates—The coordinates must be numeric values and in the active map's coordinate system.
    Caution:

    The map may use different display units than the entered coordinates. The use of a cardinal direction (N, S, E, W) is not supported. Use a negative value sign for south and west coordinates.

Extent
Processing Boundary

A polygon feature that will define the area of interest to be processed.

Feature Layer
Process entire LAS files that intersect extent
(Optional)

Specifies how the area of interest will be used in determining how .las files will be processed. The area of interest is defined by the Processing Extent parameter value, the Processing Boundary parameter value, or a combination of both.

  • Unchecked—Only LAS points that intersect the area of interest will be processed. This is the default.
  • Checked—If any portion of a .las file intersects the area of interest, all the points in that file, including those outside the area of interest, will be processed.
Boolean
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
Detection Algorithm
(Optional)

Specifies the version of the ground detection algorithm that will be used to classify the ground points.

  • LatestThe most recent version of the ground detection algorithm will be used. This option improves the handling of noise and outlier points, especially for photogrammetrically derived point clouds. It is also produces better results and faster performance in most cases. This is the default.
  • First GenerationThe initial version of the ground detection algorithm will be used. Use this option only when the results from the latest version are not suitable.
String
Classify low-noise points
(Optional)

Specifies whether points below a given distance beneath the ground will be classified as low noise. The distance at which noise points are identified is based on the Minimum Depth Below Ground parameter value. Low-noise points are assigned a class code value of 7.

  • Checked—Low-noise points will be classified.
  • Unchecked—Low-noise points will not be classified. This is the default.
Boolean
Minimum Depth Below Ground
(Optional)

The distance below the ground that will be used to classify low-noise points. The ground will be defined by a triangulated surface created from ground-classified points. All points with class codes 0 or 1 that are below the ground by the height provided in this parameter will be assigned a class code value of 7.

Linear Unit
Preserve existing low noise
(Optional)

Specifies whether existing low-noise points with class code 7 will be preserved or reclassified. If low-noise points are reclassified, any points that are not below the ground by at least the distance provided for the Minimum Depth Below Ground parameter value will be assigned a class code value of 1.

  • Checked—Existing low-noise points will be preserved. This is the default.
  • Unchecked—Existing low-noise points will be reclassified.
Boolean
Classify high-noise points
(Optional)

Specifies whether points above a given distance from the ground will be classified as high noise. The distance at which noise points are identified is based on the Minimum Height Above Ground parameter value. High-noise points are assigned a class code value of 18.

  • Checked—High-noise points will be classified.
  • Unchecked—High-noise points will not be classified. This is the default.
Boolean
Minimum Height Above Ground
(Optional)

The distance above the ground that will be used to classify high-noise points. The ground will be defined by a triangulated surface created from ground-classified points. All points with class codes 0 or 1 that are above the ground by the height provided in this parameter will be assigned a class code value of 18.

Linear Unit
Preserve existing high noise
(Optional)

Specifies whether existing high-noise points with class code 18 will be preserved or reclassified. If high-noise points are reclassified, any points that are not above the ground by at least the distance provided for the Minimum Depth Above Ground parameter will be assigned a class code value of 1.

  • Checked—Existing high-noise points will be preserved. This is the default.
  • Unchecked—Existing high-noise points will be reclassified.
Boolean

Derived Output

LabelExplanationData Type
Output LAS Dataset

The LAS dataset that was modified.

LAS Dataset Layer

arcpy.ddd.ClassifyLasGround(in_las_dataset, method, {reuse_ground}, {dem_resolution}, {compute_stats}, {extent}, boundary, {process_entire_files}, {update_pyramid}, {algorithm}, {classify_low_noise}, {minimum_depth_below_ground}, {preserve_low_noise}, {classify_high_noise}, {minimum_height_above_ground}, {preserve_high_noise})
NameExplanationData Type
in_las_dataset

The LAS dataset that will be processed. Only the last return of LAS points with class code values of 0, 1, and 2 will be evaluated.

LAS Dataset Layer
method

Specifies the method that will be used to detect ground points.

  • STANDARDThis method has a tolerance for slope variation that allows it to capture gradual undulations in the ground's topography that would typically be missed by the conservative option but not capture the type of sharp reliefs that would be captured by the aggressive option. This is the default.
  • CONSERVATIVE When compared to other options, this method uses a tighter restriction on the variation of the ground's slope that allows it to differentiate the ground from low-lying vegetation such as grass and shrubbery. It is best suited for topography with minimal curvature.
  • AGGRESSIVEThis method detects ground areas with sharper reliefs, such as ridges and hill tops, that may be ignored by the standard option. This method is best used in a second iteration of this tool with the reuse_ground parameter set to REUSE_GROUND. Avoid using this method in urban areas or flat, rural areas, as it may result in the misclassification of taller objects—such as utility towers, vegetation, and portions of buildings—as ground.
String
reuse_ground
(Optional)

Specifies whether existing ground points will be reclassified or reused.

  • RECLASSIFY_GROUND Existing ground points will be reclassified. Points that are not found to be a part of the ground will be reassigned a class code value of 1, which represents unclassified points. This is the default.
  • REUSE_GROUND Existing ground points will be accepted and reused without scrutiny and contribute to the determination of unclassified points.
Boolean
dem_resolution
(Optional)

A distance that will result in only a subset of points being evaluated for classification as ground, making the process faster. Consider using this parameter when a faster method for generating a DEM surface is needed. The minimum distance is 0.3 meters, but the provided distance must be at least 1.5 times the average point spacing of the lidar data for this process to take effect.

Linear Unit
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
boundary

A polygon feature that will define the area of interest to be processed.

Feature Layer
process_entire_files
(Optional)

Specifies how the processing extent will be applied.

  • PROCESS_EXTENTOnly LAS points that intersect the area of interest will be processed. This is the default.
  • PROCESS_ENTIRE_FILESIf any portion of a .las file intersects the area of interest, all the points in that file, including those outside the area of interest, will be processed.
Boolean
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
algorithm
(Optional)

Specifies the version of the ground detection algorithm that will be used to classify the ground points.

  • LATESTThe most recent version of the ground detection algorithm will be used. This option improves the handling of noise and outlier points, especially for photogrammetrically derived point clouds. It is also produces better results and faster performance in most cases. This is the default.
  • FIRSTThe initial version of the ground detection algorithm will be used. Use this option only when the results from the latest version are not suitable.
String
classify_low_noise
(Optional)

Specifies whether points below a given distance beneath the ground will be classified as low noise. The distance at which noise points are identified is based on the minimum_depth_below_ground parameter value. Low-noise points are assigned a class code value of 7.

  • CLASSIFY_LOW_NOISELow-noise points will be classified.
  • NO_CLASSIFY_LOW_NOISELow-noise points will not be classified. This is the default.
Boolean
minimum_depth_below_ground
(Optional)

The distance below the ground that will be used to classify low-noise points. The ground will be defined by a triangulated surface created from ground-classified points. All points with class codes 0 or 1 that are below the ground by the height provided in this parameter will be assigned a class code value of 7.

Linear Unit
preserve_low_noise
(Optional)

Specifies whether existing low noise points with class code 7 will be preserved or reclassified. If low-noise points are reclassified, any points that are not below the ground by at least the distance provided for the minimum_depth_below_ground parameter value will be assigned a class code value of 1.

  • PRESERVE_LOW_NOISEExisting low-noise points will be preserved. This is the default.
  • RECLASSIFY_LOW_NOISEExisting low-noise points will be reclassified.
Boolean
classify_high_noise
(Optional)

Specifies whether points above a given distance from the ground will be classified as high noise. The distance at which noise points are identified is based on the minimum_height_above_ground parameter value. High-noise points are assigned a class code value of 18.

  • CLASSIFY_HIGH_NOISEHigh-noise points will be classified.
  • NO_CLASSIFY_HIGH_NOISEHigh-noise points will not be classified. This is the default.
Boolean
minimum_height_above_ground
(Optional)

The distance above the ground that will be used to classify high-noise points. The ground will be defined by a triangulated surface created from ground-classified points. All points with class codes 0 or 1 that are above the ground by the height provided in this parameter will be assigned a class code value of 18.

Linear Unit
preserve_high_noise
(Optional)

Specifies whether existing high-noise points with class code 18 will be preserved or reclassified. If high-noise points are reclassified, any points that are not above the ground by at least the distance provided for the minimum_depth_below_ground parameter will be assigned a class code value of 1.

  • PRESERVE_HIGH_NOISEExisting high-noise points will be preserved. This is the default.
  • RECLASSIFY_HIGH_NOISEExisting high-noise points will be preserved.
Boolean

Derived Output

NameExplanationData Type
out_las_dataset

The LAS dataset that was modified.

LAS Dataset Layer

Code sample

ClassifyLasGround example 1 (Python window)

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

arcpy.env.workspace = 'C:/data'
arcpy.ClassifyLasGround_3d('metro.lasd', 'CONSERVATIVE', 
                           boundary='study_area.shp', 
                           process_entire_files='PROCESS_ENTIRE_FILES')
ClassifyLasGround example 2 (stand-alone script)

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

'''****************************************************************************
Name:        Classify Ground & Vegetation in Forest Environment
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

# Set Local Variables
inLas = arcpy.GetParameterAsText(0)
recursion = arcpy.GetParameterAsText(1)
lasd = arcpy.GetParameterAsText(2)

try:
    arcpy.CheckOutExtension('3D')
    # Execute CreateLasDataset
    arcpy.management.CreateLasDataset(inLas, lasd, folder_recursion=recursion)
    # Make an initial pass of ground classifier
    arcpy.ddd.ClassifyLasGround(lasd, method="Conservative")
    # Make a secondary pass to capture ridges
    arcpy.ddd.ClassifyLasGround(lasd, method="Aggressive", 
                                reuse_ground="REUSE_GROUND")
    # Classify vegetation
    arcpy.ddd.ClassifyLasByHeight(lasd, ground_source='GROUND', 
                                  height_classification=[[3, 5], 
                                                         [4, 17], 
                                                         [5, 120]], 
                                  noise='HIGH_NOISE', compute_stats="COMPUTE_STATS")
    arcpy.CheckInExtension('3D')

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

Related topics