添加表面信息 (3D Analyst)

摘要

使用从表面重叠部分派生的基于高度的统计信息来归因于输入要素。

使用情况

  • 对于每个受支持的几何,将通过以下方式确定表面的统计数据:

    • 对于点,z 值将从表面上的 x,y 坐标派生。
    • 对于线,将通过沿其长度插值表面测量值来获取 z 属性。
    • 对于面,将汇总从与面相交的表面创建的三角化表面的 z 属性。

    输入线要素中的曲线将使用采样距离参数值增密为线段。 如果未指定采样距离,则该值将从输入表面派生。 对于栅格,默认采样距离将是栅格的像元大小。 对于 TIN、terrain 或 LAS 数据集,默认采样将基于三角化表面生成的边。 通过增密曲线,并非曲线的所有部分都将被输出值准确捕获。 如果曲线短于采样距离,则曲线将使用起点和终点简化为两点线。

  • 输出属性参数选项会写入到输入要素的属性表中。 各要素定义被评估的表面属性的位置,以及可根据要素几何报告的属性类型。

    要素几何表面属性

    从表面上点的 x,y 坐标插入的点高程。

    多点

    多点记录中所有点的最小、最大和平均高程

    折线

    沿着表面的线的 3D 距离

    沿着表面的线的最小、最大和平均高程和坡度

    与面重叠的表面的 3D 区域

    来自表面的最小、最大和平均高程和坡度

  • 坡度值以百分比单位(百分度)进行测量,线要素的坡度值沿着线的各线段进行计算。

    • 最小坡度值根据值最接近 0 或水平等级的线段获得。
    • 最大坡度根据具有最大计算值的线段获得。
    • 折线的平均坡度是通过对每个线段的坡度进行加权平均获得的。 权重基于每个线段的 3D 长度。 这种计算方法会导致较长线段对结果计算的影响比较短线段更大。
  • 所有属性都基于 TIN 表面计算,该表面用于为输入要素插入 z 信息。 非 TIN 表面将转换为中间 TIN 数据集。 要素将被剪裁到此 TIN 表面的边界,并且仅评估要素和表面共有的区域。 当输入是密集的 LAS 数据集或高分辨率栅格时,此 TIN 的构建时间可能大大增加。 如果可以使用较低分辨率的 TIN 进行分析,则可以使用栅格转 TINLAS 数据集转 TIN 工具生成细化 TIN 表面,以用于此工具。

  • 面的平均 z 值的计算方式是:使用面裁剪 TIN,并从裁剪的 TIN 中派生出结果。 此 TIN 中每个三角形的中点 z 值都将乘以三角形的 3D 面积。 所有三角形的计算结果相加,然后将总和除以这些三角形的累积 3D 面积以获得最终结果。 当指定一个大型面要素和包含大量重叠像元的栅格表面时,由于创建中间 TIN 表面所需的内存资源不足,该过程可能会失败。 如果发生这种情况,则需要创建较低分辨率的 TIN,或使用基于栅格的方法来获得预期的输出属性。 分区统计工具集中提供了几个工具,它们提供了一种更快的方式,可派生面积、最小值、最大值和平均值等属性。 区域制表以表格显示分区统计工具提供了一个可以连接到面要素的输出表。 要获得坡度属性,您可以创建坡度栅格并运行其中一个工具。 如果您没有 Spatial Analyst 扩展模块,但想要计算表面面积和体积,您可以使用面裁剪输入栅格并使用表面体积工具,此工具将输出表面面积和体积。

  • 线要素的处理方法是将线叠加在 TIN 表面上,并在线与 TIN 边缘相交的任何位置插入一个顶点。 具有曲线段的线在处理之前将增密为较短的直线段。 给定线的平均 z 值的计算方法是:将线段的中点乘以该线段的 3D 长度,将所有线段的计算结果相加,然后将总和除以线段的累积 3D 长度。

  • 使用噪点过滤器来排除以异常测量值为特征的部分表面参与到坡度计算中。 线要素由捕捉表面剖面的折点来分段,按长度过滤这些线段会消除可能由非预期的表面测量值产生的短线段影响。 同理,面要素的面积过滤器会排除三角化网格面中的狭长三角形参与到坡度计算中。 对于栅格表面,像元质心子集用于构造可应用面积过滤器的三角化网格面。 面在内部被转换为多面体(三角形的集合)。 每个这样的三角形叠加到表面上时,通常会分成较小的三角形,以便整个面与表面各处相匹配。 每个三角形中点的 z 值都将乘以该三角形的 3D 面积。 此计算结果会相加到一起,然后该总和将除以三角形的累积 3D 面积,从而得出三角形中点处 z 值的加权平均值。

参数

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

定义位置的点、多点、折线或面要素,用于确定一个或多个表面属性。

Feature Layer
输入表面

用于内插 z 值的 LAS 数据集、镶嵌、栅格、terrain 或 TIN 表面。

LAS Dataset Layer; Mosaic Layer; Raster Layer; Terrain Layer; TIN Layer
输出属性

指定将添加到输入要素类属性表中的表面高程属性。

  • Z将添加针对每个单点要素的 x,y 位置插值的表面 z 值。
  • Z 最小值将添加由面、沿线的长度或多点记录中各点的插值定义的面积中最低的表面 z 值。
  • Z 最大值将添加由面、沿线的长度或多点记录中各点的插值定义的面积中最高的表面高程。
  • Z 平均值将添加由面、沿线的长度或多点记录中各点的插值定义的面积中的平均表面高程。
  • 表面面积将添加由每个面定义的区域的 3D 表面区域。
  • 表面长度将添加沿表面线的 3D 距离。
  • 最小坡度将添加沿线或面定义的区域中的最接近零的坡度值。
  • 最大坡度将添加沿线或面定义的区域中的最高坡度值。
  • 平均坡度将添加沿线或面定义的区域中的平均坡度值。
String
方法
(可选)

指定将用于确定表面相关信息的插值方法。

  • 双线性将使用可从四个最邻近的像元中确定像元值的栅格表面的专用插值方法。 这是为栅格表面提供的唯一选项。
  • 线性将根据由包含查询点 x,y 位置的三角形定义的平面获取高程。 此为 TIN、terrain 和 LAS 数据集的默认插值方法。
  • 自然邻域法通过将基于区域的权重应用于查询点的自然邻域获取高程。
  • 合并最小 Z 值将根据在查询点自然邻域中找到的最小 z 值获取高程。
  • 合并最大 Z 值将根据在查询点自然邻域中找到的最大 z 值获取高程。
  • 合并最近的 Z 值将根据在查询点自然邻域中找到的最邻近值获取高程。
  • 合并最接近平均值的 z 值将根据距查询点所有自然邻域的平均值最近的 z 值获取高程。
String
采样距离
(可选)

用于内插 z 值的间距。 默认情况下,如果输入表面是栅格,则使用栅格像元大小;如果输入是 terrain 或 TIN 数据集,则使用三角化网格面的自然增密。

Double
Z 因子
(可选)

Z 值将乘上的系数。 此值通常用于转换 z 线性单位来匹配 x,y 线性单位。 默认值为 1,此时高程值保持不变。 如果输入表面的空间参考具有已指定线性单位的 z 基准,则此参数不可用。

Double
金字塔等级分辨率
(可选)

将使用 terrain 金字塔等级的 z 容差或窗口大小分辨率。 默认值为 0,或全分辨率。

Double
噪点过滤
(可选)

定义是否排除以异常测量值为特征的部分表面参与到坡度计算过程中。 其他属性不受此参数影响。

线要素提供长度过滤器,其中 3D 长度短于指定值的线段将在坡度计算中被排除。 面要素提供面积过滤器,将排除表面面积小于指定值的面。

String

派生输出

标注说明数据类型
更新后的输入要素

更新后的输入要素。

Feature Layer

arcpy.ddd.AddSurfaceInformation(in_feature_class, in_surface, out_property, {method}, {sample_distance}, {z_factor}, {pyramid_level_resolution}, {noise_filtering})
名称说明数据类型
in_feature_class

定义位置的点、多点、折线或面要素,用于确定一个或多个表面属性。

Feature Layer
in_surface

用于内插 z 值的 LAS 数据集、镶嵌、栅格、terrain 或 TIN 表面。

LAS Dataset Layer; Mosaic Layer; Raster Layer; Terrain Layer; TIN Layer
out_property
[out_property,...]

指定将添加到输入要素类属性表中的表面高程属性。

  • Z将添加针对每个单点要素的 x,y 位置插值的表面 z 值。
  • Z_MIN将添加由面、沿线的长度或多点记录中各点的插值定义的面积中最低的表面 z 值。
  • Z_MAX将添加由面、沿线的长度或多点记录中各点的插值定义的面积中最高的表面高程。
  • Z_MEAN将添加由面、沿线的长度或多点记录中各点的插值定义的面积中的平均表面高程。
  • SURFACE_AREA将添加由每个面定义的区域的 3D 表面区域。
  • SURFACE_LENGTH将添加沿表面线的 3D 距离。
  • MIN_SLOPE将添加沿线或面定义的区域中的最接近零的坡度值。
  • MAX_SLOPE将添加沿线或面定义的区域中的最高坡度值。
  • AVG_SLOPE将添加沿线或面定义的区域中的平均坡度值。
String
method
(可选)

指定将用于确定表面相关信息的插值方法。

  • BILINEAR将使用可从四个最邻近的像元中确定像元值的栅格表面的专用插值方法。 这是为栅格表面提供的唯一选项。
  • LINEAR将根据由包含查询点 x,y 位置的三角形定义的平面获取高程。 此为 TIN、terrain 和 LAS 数据集的默认插值方法。
  • NATURAL_NEIGHBORS通过将基于区域的权重应用于查询点的自然邻域获取高程。
  • CONFLATE_ZMIN将根据在查询点自然邻域中找到的最小 z 值获取高程。
  • CONFLATE_ZMAX将根据在查询点自然邻域中找到的最大 z 值获取高程。
  • CONFLATE_NEAREST将根据在查询点自然邻域中找到的最邻近值获取高程。
  • CONFLATE_CLOSEST_TO_MEAN将根据距查询点所有自然邻域的平均值最近的 z 值获取高程。
String
sample_distance
(可选)

用于内插 z 值的间距。 默认情况下,如果输入表面是栅格,则使用栅格像元大小;如果输入是 terrain 或 TIN 数据集,则使用三角化网格面的自然增密。

Double
z_factor
(可选)

Z 值将乘上的系数。 此值通常用于转换 z 线性单位来匹配 x,y 线性单位。 默认值为 1,此时高程值保持不变。 如果输入表面的空间参考具有已指定线性单位的 z 基准,则此参数不可用。

Double
pyramid_level_resolution
(可选)

将使用 terrain 金字塔等级的 z 容差或窗口大小分辨率。 默认值为 0,或全分辨率。

Double
noise_filtering
(可选)

定义是否排除以异常测量值为特征的部分表面参与到坡度计算过程中。 其他属性不受此参数影响。

线要素提供长度过滤器,其中 3D 长度短于指定值的线段将在坡度计算中被排除。 面要素提供面积过滤器,将排除表面面积小于指定值的面。

String

派生输出

名称说明数据类型
output_feature_class

更新后的输入要素。

Feature Layer

代码示例

AddSurfaceInformation 示例 1(Python 窗口)

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

arcpy.env.workspace = "C:/data"
arcpy.ddd.AddSurfaceInformation("points.shp", "my_tin", "Z", "LINEAR")
AddSurfaceInformation 示例 2(独立脚本)

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

'''*********************************************************************
Name: AddSurfaceInformation Example
Description: This script demonstrates how to use AddSurfaceInformation 
             on all 2D feature classes in a target workspace.
*********************************************************************'''
# Import system modules
import arcpy

# Set Local Variables
arcpy.env.workspace = 'c:/data'
inSurface = 'fgdb.gdb/municipal/terrain'
pyramid = 5
method = "BILINEAR"

# Create list of feature classes
fcList = arcpy.ListFeatureClasses()

if fcList:
    for fc in fcList:
        desc = arcpy.Describe(fc)
        # Determine if the feature is 2D
        if not desc.hasZ:
            if desc.shapeType == "Polygon":
                # Desired properties separated by semi-colons
                Prop = "Z_MIN;Z_MAX" 
            elif desc.shapeType == "Point":
                Prop = "Z"
            elif desc.shapeType == "Multipoint":
                Prop = "Z_MIN;Z_MAX;Z_MEAN"
            elif desc.shapeType == "Polyline":
                Prop = "LENGTH_3D"
            # Execute AddSurfaceInformation
            arcpy.ddd.AddSurfaceInformation(fc, inSurface, Prop, 
                                            method, 15, 1, pyramid)
            print("Completed adding surface information.")

许可信息

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

相关主题