Classify LAS Overlap (3D Analyst)

Summary

Classifies LAS points from overlapping scans of aerial lidar surveys.

Illustration

Classify LAS Overlap tool example

Usage

  • Overlap points represent LAS returns that exist in close proximity to another point from a scan originating in a different flight line. When multiple points from different flight lines are present within a distance shorter than the nominal point spacing, the point with the greater scan angle is typically flagged as overlap. The overlap designation allows the points to be filtered and excluded from visualization and analysis.

  • This tool works on tiled .las files that combine point records from multiple flight lines. Each .las file is processed individually with the input LAS data on a file-by-file basis, which means it will not identify overlapping points if each flight line is stored in a separate .las file. The Tile LAS tool can be used to merge a collection of .las files composed of individual flight lines into tiled files that merge multiple flight lines.

  • Unclassified overlap points may produce undesirable results in operations that assume regular point distribution. Data derived from processing points with irregular point densities and distribution may yield an undesirable margin of error. Classifying overlap points allows the LAS data to be filtered to produce a consistent point density and reduce the potential for point returns with higher margin of error.

  • The point source ID attribute of a LAS point provides information about the flight line from which it was collected. This tool processes LAS data in tiles by determining if multiple point source IDs are present and identifying the ID with the higher magnitude scan angle as the overlap. If multiple points with the same point source ID exist in the area being processed, all the points that share the point source ID of the point with the largest magnitude scan angle will be classified as overlap. For this reason, the sample size used to evaluate the LAS points should be approximately two to three times the size of the nominal point spacing of the LAS data. Avoid larger tile sizes because the possibility of misclassifying points with smaller scan angle values is increased. Smaller sample sizes may not capture enough points to properly identify and classify any overlap points.

  • Overlap points in LAS version 1.4 files and point record formats 6 through 8 will be assigned the overlap classification flag while retaining their original class code value. Overlap points in all other supported .las files will be assigned a class code value of 12. If the class code value of 12 is being used by the input .las files to represent something other than overlapping scans, consider using the Change LAS Class Codes tool to reassign those points to another value before executing this tool.

Parameters

LabelExplanationData Type
Input LAS Dataset

The tiled LAS dataset to process.

LAS Dataset Layer
Sample Distance

The distance of either dimension of the square area that will be used to evaluate the LAS data. If Unknown is specified as the linear unit, the unit will be defined by the spatial reference of the input .las file.

Linear Unit
Processing Extent
(Optional)

The extent of the data that will be evaluated.

  • Default—The extent will be based on the maximum extent of all participating inputs. This is the default.
  • Union of Inputs—The extent will be based on the maximum extent of all inputs.
  • Intersection of Inputs—The extent will be based on the minimum area common to all inputs.
  • Current Display Extent—The extent is equal to the visible display. The option is not available when there is no active map.
  • As Specified Below—The extent will be based on the minimum and maximum extent values specified.
  • Browse—The extent will be based on an existing dataset.
Extent
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 .las file, including those outside the area of interest, will be processed.
Boolean
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
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

Derived Output

LabelExplanationData Type
Output LAS Dataset

The LAS dataset to be modified.

LAS Dataset Layer

arcpy.ddd.ClassifyLasOverlap(in_las_dataset, sample_distance, {extent}, {process_entire_files}, {compute_stats}, {update_pyramid})
NameExplanationData Type
in_las_dataset

The tiled LAS dataset to process.

LAS Dataset Layer
sample_distance

The distance of either dimension of the square area that will be used to evaluate the LAS data. This value can be expressed as a number and a linear unit value, such as 3 meters. If linear units are not specified or are entered as Unknown, the unit will be defined by the spatial reference of the input .las file.

Linear Unit
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 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 .las file, including those outside the area of interest, will be processed.
Boolean
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
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

Derived Output

NameExplanationData Type
out_las_dataset

The LAS dataset to be modified.

LAS Dataset Layer

Code sample

ClassifyLasOverlap example 1 (Python window)

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

arcpy.env.workspace = 'C:/data'

arcpy.ddd.ClassifyLasOverlap('Denver_2.lasd', '1 Meter')
ClassifyLasOverlap example 2 (stand-alone script)

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

'''****************************************************************************
       Name: Classify Lidar & Extract Building Footprints
Description: Extract footprint from lidar points classified as buildings, 
             regularize its geometry, and calculate the building height.

****************************************************************************'''
import arcpy

lasd = arcpy.GetParameterAsText(0)
dem = arcpy.GetParameterAsText(1)
footprint = arcpy.GetParameterAsText(2)

try:
    desc = arcpy.Describe(lasd)
    if desc.spatialReference.linearUnitName in ['Foot_US', 'Foot']:
        unit = 'Feet'
    else:
        unit = 'Meters'
    ptSpacing = desc.pointSpacing * 2.25
    sampling = '{0} {1}'.format(ptSpacing, unit)
    # Classify overlap points
    arcpy.ddd.ClassifyLASOverlap(lasd, sampling)
    # Classify ground points
    arcpy.ddd.ClassifyLasGround(lasd)
    # Filter for ground points
    arcpy.management.MakeLasDatasetLayer(lasd, 'ground', class_code=[2])
    # Generate DEM
    arcpy.conversion.LasDatasetToRaster('ground', dem, 'ELEVATION', 
                                        'BINNING NEAREST NATURAL_NEIGHBOR', 
                                        sampling_type='CELLSIZE', 
                                        sampling_value=desc.pointSpacing)
    # Classify noise points
    arcpy.ddd.ClassifyLasNoise(lasd, method='ISOLATION', edit_las='CLASSIFY', 
                               withheld='WITHHELD', ground=dem, 
                               low_z='-2 feet', high_z='300 feet', 
                               max_neighbors=ptSpacing, step_width=ptSpacing, 
                               step_height='10 feet')
    # Classify buildings
    arcpy.ddd.ClassifyLasBuilding(lasd, '7.5 feet', '80 Square Feet')
    #Classify vegetation
    arcpy.ddd.ClassifyLasByHeight(lasd, 'GROUND', [8, 20, 55], 
                                  compute_stats='COMPUTE_STATS')
    # Filter LAS dataset for building points
    lasd_layer = 'building points'
    arcpy.management.MakeLasDatasetLayer(lasd, lasd_layer, class_code=[6])
    # Export raster from lidar using only building points
    temp_raster = 'in_memory/bldg_raster'
    arcpy.management.LasPointStatsAsRaster(lasd_layer, temp_raster,
                                           'PREDOMINANT_CLASS', 'CELLSIZE', 2.5)
    # Convert building raster to polygon
    temp_footprint = 'in_memory/footprint'
    arcpy.conversion.RasterToPolygon(temp_raster, temp_footprint)
    # Regularize building footprints
    arcpy.ddd.RegularizeBuildingFootprint(temp_footprint, footprint, 
                                          method='RIGHT_ANGLES')

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

Licensing information

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

Related topics