Summary
Classifies ground points in aerial lidar data.
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 will be eligible to be assigned as ground points. If your 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.
Consider using 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 ground classifier once with the standard method and a second time with the aggressive detection method and the reuse ground option enabled. Apply a processing extent or specify a polygon boundary to limit this operation to only the region it is needed.
Locations with bridges and freeway on-ramps should be reviewed as they may be misclassified as ground.
Syntax
arcpy.3d.ClassifyLasGround(in_las_dataset, method, {reuse_ground}, {dem_resolution}, {compute_stats}, {extent}, boundary, {process_entire_files})
Parameter | Explanation | Data Type |
in_las_dataset | The LAS dataset to process. 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 used to detect ground points.
| String |
reuse_ground (Optional) | Specifies whether existing ground points will be reclassified or reused.
| Boolean |
dem_resolution (Optional) | A distance that will result in only a subset of points being evaluated for classification as ground, thereby 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 specified 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 should 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, like classification codes and return information, to values that are present in the LAS file.
| Boolean |
extent (Optional) | Specifies the extent of the data that will be evaluated by this tool.
| Extent |
boundary | A polygon feature that defines the area of interest to be processed by this tool. | Feature Layer |
process_entire_files (Optional) | Specifies how the processing extent is applied.
| Boolean |
Derived Output
Name | Explanation | Data Type |
out_las_dataset | The LAS dataset that was modified. | LAS Dataset Layer |
Code sample
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')
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())
Environments
Licensing information
- Basic: Requires 3D Analyst
- Standard: Requires 3D Analyst
- Advanced: Requires 3D Analyst