规则化邻近建筑物覆盖区 (3D Analyst)

摘要

规则化具有公共边界的建筑物覆盖区。

使用情况

  • 此工具使用折线压缩算法校正通过要素提取工作流(该工作流可能会产生多余的伪影)创建的建筑物覆盖区面中的变形。

  • 当规则化从栅格数据获取的建筑物覆盖区时,规则化容差应该比源栅格的分辨率更大。

  • 为了使所创建的规则化边界不会与其他要素重叠,具有相邻边界的要素必须具有相同的属性值。如果没有相同属性,请考虑以下步骤:

    1. 使用缓冲距离与所需规则化容差相匹配的缓冲工具。
    2. 使用联合工具处理缓冲的面要素,以便为重叠面创建单个要素。
    3. 使用空间连接工具将联合的面中的唯一 ID 添加到将规则化的原始输入要素。
    4. 运行规则化邻近建筑物覆盖区工具,字段中包含在分组字段(Python 中的 group 参数)中指定的唯一 ID。
  • 对于包含锐角或优角的输入要素,或两条线段之间的角度弯曲未落在 90° 和 180° 之间的 45° 间隔时,考虑使用任意角

  • 如果工具无法对给定输入生成规则化解决方案,则会将原始要素复制到输出。 STATUS 字段中指定的值将指示是否按以下方式对要素进行规则化:

    • 0 - 规则化要素
    • 1 - 原始要素

参数

标注说明数据类型
输入要素

将处理的输入要素。

Feature Layer
分组字段

此字段用于确定哪些要素将共享重合、非重叠边界。

Field
输出要素类

将生成的要素类。

Feature Class
方法

规则化输入要素时使用的方法。

  • RIGHT_ANGLES标识符合沿 90° 和 180° 角的输入要素折点的最佳线段。
  • RIGHT_ANGLES_AND_DIAGONALS标识符合沿 90°、135° 和 180° 内角的输入要素折点的最佳线段。
  • ANY_ANGLES标识沿任意角度的最佳拟合线,同时减少输入要素的总折点数。
String
容差

规则化覆盖区可从其原始要素的边界偏移的最大距离。

Linear Unit
精度

将在规则化过程中使用的空间格网精度。 值的有效范围为 0.05 到 0.25。

Double
角度偏差限制

最佳拟合线内角的最大偏差,可适用于使用直角和对角 (RIGHT_ANGLES_AND_DIAGONALS) 方法时。为获得最佳结果,通常应保持此值小于 5°。对于其他规则化方法,此参数将处于禁用状态。

Double

arcpy.ddd.RegularizeAdjacentBuildingFootprint(in_features, group, out_feature_class, method, tolerance, precision, angular_limit)
名称说明数据类型
in_features

将处理的输入要素。

Feature Layer
group

此字段用于确定哪些要素将共享重合、非重叠边界。

Field
out_feature_class

将生成的要素类。

Feature Class
method

规则化输入要素时使用的方法。

  • RIGHT_ANGLES标识符合沿 90° 和 180° 角的输入要素折点的最佳线段。
  • RIGHT_ANGLES_AND_DIAGONALS标识符合沿 90°、135° 和 180° 内角的输入要素折点的最佳线段。
  • ANY_ANGLES标识沿任意角度的最佳拟合线,同时减少输入要素的总折点数。
String
tolerance

规则化覆盖区可从其原始要素的边界偏移的最大距离。

Linear Unit
precision

将在规则化过程中使用的空间格网精度。 值的有效范围为 0.05 到 0.25。

Double
angular_limit

最佳拟合线内角的最大偏差,可适用于使用直角和对角 (RIGHT_ANGLES_AND_DIAGONALS) 方法时。为获得最佳结果,通常应保持此值小于 5°。对于其他规则化方法,此参数将处于禁用状态。

Double

代码示例

RegularizeAdjacentBuildingFootprint 示例 1(Python 窗口)

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

arcpy.env.workspace = 'c:/data'
arcpy.ddd.RegularizeAdjacentBuildingFootprint('rough_footprints.shp', 'Block_ID',
                                              'regularized_footprints.shp', 
                                              'RIGHT_ANGLES_AND_DIAGONALS', 
                                              '2 Meters', 0.10)
RegularizeAdjacentBuildingFootprint 示例 2(独立脚本)

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

'''****************************************************************************
       Name: 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)
footprint = arcpy.GetParameterAsText(1)

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


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

相关主题