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 the ground surface created using lidar returns that are assigned class code values of either 2 or 8. If lidar ground returns use values other than 2 or 8, use the Change LAS Class Codes tool to conform the class code definition to the LAS format specifications.

  • Consider using this tool to classify vegetation in lidar data collected over remote areas with minimal presence of buildings.

  • 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 deemed satisfactory, it can then be applied to a larger extent.

  • The LAS format supports the classification of each point based on the specifications defined by the American Society for Photogrammetry and Remote Sensing (ASPRS). The ArcGIS platform applies the classification scheme specified for LAS file version 1.4:

    Classification Value Classification Type

    0

    Never Classified

    1

    Unassigned

    2

    Ground

    3

    Low Vegetation

    4

    Medium Vegetation

    5

    High Vegetation

    6

    Building

    7

    Low Noise

    8

    Model Key / Reserved

    9

    Water

    10

    Rail

    11

    Road Surface

    12

    Overlap / Reserved

    13

    Wire – Guard

    14

    Wire – Conductor

    15

    Transmission Tower

    16

    Wire – Connector

    17

    Bridge Deck

    18

    High Noise

    19 – 63

    Reserved for ASPRS Definition (LAS 1.1 to 1.3 support up to class code 31)

    32 – 255

    User Definable (Only supported in LAS 1.0 and certain versions of 1.4)

    Note:

    While the bulk of new class code assignments introduced with LAS 1.4 were previously designated as Reserved, class codes 8 and 12 were changed from Model Key and Overlap to Reserved.

Syntax

ClassifyLasByHeight(in_las_dataset, ground_source, height_classification, {noise}, {compute_stats}, {extent}, {process_entire_files}, boundary)
ParameterExplanationData 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

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.
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 are used to define the reclassification of LAS points. The first entry's Z-range 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)

Indicates whether to reclassify points 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 like 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 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 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.

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

Specify the extent of the data that will be evaluated by this tool.

Extent
process_entire_files
(Optional)

Specify how the processing extent is applied.

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

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

Feature 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.ClassifyLasByHeight_3d('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())

Licensing information

  • Basic: Requires 3D Analyst
  • Standard: Requires 3D Analyst
  • Advanced: Requires 3D Analyst

Related topics