LAS 建筑物多面体 (3D Analyst)

摘要

通过从激光雷达数据中捕获的屋顶点创建建筑物模型。

插图

LAS 建筑物多面体工具图示

使用情况

  • 假设 LAS 点可提供建筑物屋顶的所需覆盖范围。 要获得最佳效果,请排除表示建筑物(而非屋顶)部分的点,因为其通常会向生成的建筑物模型添加噪点。 如果 LAS 数据集中不存在建筑物分类点,请使用分类 LAS 建筑物工具对它们进行分类。 该工具将为代表建筑物屋顶的点指定类代码值 6。 通过使用不同的参数选择再次运行工具或通过交互式分类编辑,查看分类结果并进行任何必要的修改。 您对建筑物分类覆盖范围感到满意后,即可生成模型。

  • 执行此工具之前,应对地面点进行分类。 使用分类 LAS 地面点工具分配类代码值为 2 的地面点(如果之前未分类)。

  • 通过使用与建筑物覆盖区面重叠的 LAS 点构造 TIN 来生成建筑物模型。 覆盖区将作为裁剪面整合到此 TIN 中,其高度由地面高度参数中指定的源定义。 地面高度参数值可以指定为覆盖区面属性表中的字段或高程表面。

  • 此工具不支持包含弧线段的面。 如果输入数据中存在此类要素,请考虑制作这些要素的副本,并使用增密工具将圆弧几何替换为线段。

  • 如果地面高度从覆盖区面属性表的字段中获取,则假设其高度单位与输入 LAS 数据集的 z 单位相同。 如果以不同的线性单位表示属性表中的高度,请考虑使用计算字段工具,以在使用此工具之前应用适当的转换系数。 可以通过以下方式将地面高度归于建筑物覆盖区面:

    • 使用图层属性或创建 LAS 数据集图层工具对地面点的 LAS 数据集进行过滤。
    • 运行添加表面信息工具,其中输入要素设置为建筑物覆盖区面,输入表面设置为经过地面过滤的 LAS 数据集,并且输出属性设置为 Z_MIN 值,以确保建筑物达到最低 z 值。
  • 如果地面高度由地面定义,则沿面边界的最小 z 值将定义建筑物的基本高度。 为表面使用与 LAS 数据集相同的垂直坐标系。 通过对地面分类点的 LAS 数据集进行过滤,然后使用 LAS 数据集转栅格LAS 数据集转 TIN 工具以生成表面,可以根据地面分类的 LAS 点来创建地面的 TIN 或栅格表面。

  • 当存在 LAS 数据集的统计数据时,将更加有效地处理 LAS 点。 可以使用 LAS 数据集统计数据工具计算统计数据。

参数

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

LAS 数据集包含将用于定义建筑物屋顶的点。

LAS Dataset Layer
输入要素

定义建筑物覆盖区面的面要素。

Feature Layer
地面高度

地面高度值的来源可以是建筑物覆盖区面属性表中的数值字段、栅格或 TIN 表面。 基于字段的地面源将比基于表面的地面源的处理速度快。

Field; Raster Layer; TIN Layer
输出多面体要素类

用于存储输出建筑物模型的多面体要素类。

Feature Class
LAS 屋顶点选择
(可选)

将用于定义建筑物屋顶的 LAS 点。

  • 建筑物分类点将使用分配的类代码值为 6 的 LAS 点。 这是默认设置。
  • 图层过滤点将使用按输入图层过滤的 LAS 点。
  • 所有点将使用与建筑物覆盖区面重叠的所有 LAS 点。
String
简化容差

可用于减少影响建筑物屋顶建模的 LAS 点数量的 z 容差值。 此值用于定义输出屋顶模型与屋顶表面(通过全分辨率下的 LAS 点创建)之间的偏差的最大阈值。

Linear Unit

arcpy.ddd.LasBuildingMultipatch(in_las_dataset, in_features, ground, out_feature_class, {point_selection}, simplification)
名称说明数据类型
in_las_dataset

LAS 数据集包含将用于定义建筑物屋顶的点。

LAS Dataset Layer
in_features

定义建筑物覆盖区面的面要素。

Feature Layer
ground

地面高度值的来源可以是建筑物覆盖区面属性表中的数值字段、栅格或 TIN 表面。 基于字段的地面源将比基于表面的地面源的处理速度快。

Field; Raster Layer; TIN Layer
out_feature_class

用于存储输出建筑物模型的多面体要素类。

Feature Class
point_selection
(可选)

将用于定义建筑物屋顶的 LAS 点。

  • BUILDING_CLASSIFIED_POINTS将使用分配的类代码值为 6 的 LAS 点。 这是默认设置。
  • LAYER_FILTERED_POINTS将使用按输入图层过滤的 LAS 点。
  • ALL_POINTS将使用与建筑物覆盖区面重叠的所有 LAS 点。
String
simplification

可用于减少影响建筑物屋顶建模的 LAS 点数量的 z 容差值。 此值用于定义输出屋顶模型与屋顶表面(通过全分辨率下的 LAS 点创建)之间的偏差的最大阈值。

Linear Unit

代码示例

LasBuildingMultipatch 示例 1(Python 窗口)

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

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

arcpy.LasBuildingMultipatch_3d('Highland.lasd', 'footprint.shp', 'dem.tif', 
                               'highland_3d_bldgs.shp', simplification='4 Feet')
LasBuildingMultipatch 示例 2(独立脚本)

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

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

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

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

try:
    lasd_layer = 'building points'
    arcpy.management.MakeLasDatasetLayer(lasd, lasd_layer, class_code=6)
    temp_raster = 'in_memory/bldg_raster'
    arcpy.management.LasPointStatsAsRaster(lasd_layer, temp_raster,
                                           'PREDOMINANT_CLASS', 'CELLSIZE', 2.5)
    temp_footprint = 'in_memory/footprint'
    arcpy.conversion.RasterToPolygon(temp_raster, temp_footprint)
    arcpy.ddd.RegularizeBuildingFootprint(temp_footprint, footprint, 
                                          method='RIGHT_ANGLES')
    arcpy.ddd.LasPointStatsByArea(lasd_layer, footprint, ['MIN_Z', 'MAX_Z'])
    arcpy.management.AddField(footprint, 'Height', 'Double')
    arcpy.management.CalculateField(footprint, 'Height', 
                                    "round('!Z_Max! - !Z_Min!', 2)", 
                                    'PYTHON_9.3')
    simplification = arcpy.Describe(lasd).pointSpacing * 4
    arcpy.ddd.LasBuildingMultipatch(lasd_layer, footprint, 'Z_MIN', model, 
                                    'BUILDING_CLASSIFIED_POINTS', simplification)


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

许可信息

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

相关主题