分类 LAS 重叠 (3D Analyst)

描述

根据航测激光雷达测量的重叠扫描对 LAS 点进行分类。

插图

分类 LAS 重叠

使用方法

  • 重叠点表示与来自其他航线的扫描中的另一个点紧密邻近的 LAS 回波。当来自不同航线的多个点位于比标称点间距短的距离内时,通常将扫描角度较大的点标记为重叠。重叠标识用于对点进行过滤,并将其从可视化和分析中排除。

  • 此工具适用于合并来自多条航线的点记录的切片 LAS 文件。将单独处理每个 LAS 文件,即逐个文件处理输入 LAS 数据,这意味着如果每条航线存储在单独的 LAS 文件中,不会将其标识为重叠点。切片 LAS工具可用于将包含单条航线的 LAS 文件集合合并为合并多条航线的切片文件。

  • 未分类的重叠点可能在假定规则点分布的操作中生成非所需结果。派生自具有不规则点密度和分布的处理点的数据可能生成非所需误差范围。通过对重叠点进行分类,可对 LAS 数据进行过滤,以产生一致的点密度并降低点回波具有较高误差范围的可能性。

  • LAS 点的点源 ID 属性可提供从中采集 LAS 点的航线的相关信息。此工具按块对 LAS 数据进行处理,方法为:确定是否存在多个点源 ID,然后将具有较高量级扫描角度的 ID 标识为重叠。如果正在处理的区域中存在多个点源 ID 相同的点,对于拥有最大量级扫描角的点,所有共享该点点源 ID 的点都将被分类为重叠。为此,用于评估 LAS 点的样本大小应约为 LAS 数据标准点间距的 2 到 3 倍。应该避免使用较大块,因为它可能会错误分类扫描角度值较小的点。小型样本可能无法捕获足够的点来正确识别和分类所有重叠点。

  • 将为 LAS 版本 1.4 文件中且点记录格式为 6-8 的重叠点分配重叠分类标记,同时保留其原始类代码值。将为其他所有受支持的 LAS 文件中的重叠点分配类代码值 12。如果输入 LAS 文件已使用类代码值 12 来表示重叠扫描外的内容,在执行此工具之前,请考虑使用更改 LAS 类代码工具为这些点重新分配其他值。

语法

ClassifyLasOverlap(in_las_dataset, sample_distance, {extent}, {process_entire_files}, {compute_stats})
参数说明数据类型
in_las_dataset

待处理的切片 LAS 数据集。

LAS Dataset Layer
sample_distance

用于评估 LAS 数据的方形区域各维度的距离。此值可表示为数字加线性单位值,例如“3 米”。如果未指定线性单位或将其作为 Unknown 输入,则单位将由输入 LAS 文件的空间参考进行定义。

Linear Unit
extent
(可选)

指定将由此工具进行评估的数据范围。

Extent
process_entire_files
(可选)

指定处理范围的应用方式。

  • PROCESS_EXTENT仅处理与感兴趣区相交的 LAS 点。这是默认设置。
  • PROCESS_ENTIRE_FILES如果 LAS 文件的任何部分与感兴趣区相交,则该 LAS 文件中的所有点(包括感兴趣区以外的点)都会得到处理。
Boolean
compute_stats
(可选)

指定是否应计算 LAS 数据集引用的 LAS 文件的统计数据。计算统计数据时会为每个 LAS 文件提供一个空间索引,从而提高了分析和显示性能。统计数据还可通过将 LAS 属性(如分类代码和返回信息)显示限制为 LAS 文件中存在的值来提升过滤和符号系统体验。

  • COMPUTE_STATS将计算统计数据。
  • NO_COMPUTE_STATS不计算统计数据。这是默认设置。
Boolean

派生输出

名称说明数据类型
out_las_dataset

待修改的 LAS 数据集。

LAS 数据集图层

代码示例

ClassifyLasOverlap 示例 1(Python 窗口)

下面的示例演示了如何在 Python 窗口中使用此工具。

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

arcpy.ddd.ClassifyLasOverlap('Denver_2.lasd', '1 Meter')
ClassifyLasOverlap 示例 2(独立脚本)

下面的示例演示了如何在独立 Python 脚本中使用此工具。

'''****************************************************************************
       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())

许可信息

  • Basic: 需要 3D Analyst
  • Standard: 需要 3D Analyst
  • Advanced: 需要 3D Analyst

相关主题