分类 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 类代码工具为这些点重新分配其他值。

参数

标注说明数据类型
输入 LAS 数据集

待处理的切片 LAS 数据集。

LAS Dataset Layer
采样距离

将用于评估 LAS 数据的方形区域各维度的距离。 如果指定线性单位为未知,则将由输入 .las 文件的空间参考来定义单位。

Linear Unit
处理范围
(可选)

待评估数据的范围。

  • 默认 - 该范围将基于所有参与输入的最大范围设定。这是默认设置。
  • 输入的并集 - 该范围将基于所有输入的最大范围。
  • 输入的交集 - 该范围将基于所有输入共用的最小区域。
  • 当前显示范围 - 该范围与可见显示范围相等。如果没有活动地图,则该选项将不可用。
  • 如下面的指定 - 该范围将基于指定的最小和最大范围值。
  • 浏览 - 该范围将基于现有数据集。
Extent
处理与范围相交的整个 LAS 文件
(可选)

指定将如何使用感兴趣区以确定 .las 文件的处理方式。 感兴趣区由处理范围参数值和处理边界参数值定义,或由二者共同定义。

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

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

  • 选中 - 将计算统计数据。 这是默认设置。
  • 未选中 - 不计算统计数据。
Boolean
更新金字塔
(可选)

指定修改类代码后,LAS 数据集金字塔是否会更新。

  • 选中 - LAS 数据集金字塔将更新。 这是默认设置。
  • 未选中 - LAS 数据集金字塔不会更新。
Boolean

派生输出

标注说明数据类型
输出 LAS 数据集

待修改的 LAS 数据集。

LAS Dataset Layer

arcpy.ddd.ClassifyLasOverlap(in_las_dataset, sample_distance, {extent}, {process_entire_files}, {compute_stats}, {update_pyramid})
名称说明数据类型
in_las_dataset

待处理的切片 LAS 数据集。

LAS Dataset Layer
sample_distance

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

Linear Unit
extent
(可选)

待评估数据的范围。

  • MAXOF - 将使用所有输入的最大范围。
  • MINOF - 将使用所有输入共有的最小区域。
  • DISPLAY - 该范围与可见显示范围相等。
  • 图层名称 - 将使用指定图层的范围。
  • Extent 对象 - 将使用指定对象的范围。
  • 以空格分隔的坐标字符串 - 将使用指定字符串的范围。坐标以 x-min,y-min,x-max,y-max 的顺序表示。
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
update_pyramid
(可选)

指定修改类代码后,LAS 数据集金字塔是否会更新。

  • UPDATE_PYRAMIDLAS 数据集金字塔将更新。 这是默认设置。
  • NO_UPDATE_PYRAMIDLAS 数据集金字塔不会更新。
Boolean

派生输出

名称说明数据类型
out_las_dataset

待修改的 LAS 数据集。

LAS Dataset Layer

代码示例

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

相关主题