创建 TIN (3D Analyst)

摘要

创建一个不规则三角网 (TIN) 数据集。

插图

创建 TIN 工具图示。

使用情况

  • 避免使用地理坐标系创建 TIN,因为以球面坐标表示 x,y 单位时,无法有效实施 Delaunay 三角测量规则。

  • 表面要素类型用于定义输入要素将如何构成表面三角化的定义。

    • 可将点要素指定为离散多点,而这些点所提供的数据结点的 z 值用于表面的三角测量。
    • 可将线要素指定为离散多点和隔断线,表示沿某一表面的位置,该表面的坡度线性不连续,如山脊线、海岸线、路面边缘、建筑物轮廓等。
    • 此外,也可将面要素,以及用于定义数据区的裁剪要素、通过常量 z 值定义区域的替换要素(例如水体)和表示不存在数据的内部区域的擦除要素指定为离散多点和隔断线。
  • 如果有足够的内存,该工具可以创建由数百万个点组成的 TIN。 但是,将 TIN 结点的数量限制在 600 万以下将确保响应迅速的显示性能和整体可用性。 TIN 表面越大,越适合使用多分辨率 terrain 数据集进行管理。 使用 LAS 格式的点云数据时,LAS 数据集可用于高效地渲染和处理 TIN 表面中的 LAS 点,该表面包含 TIN 数据集中同样支持的基于折线和面的表面约束。

  • 如果待创建的 TIN 将用于 ArcGIS Desktop 10.0 之前的版本,可将默认 TIN 存储版本环境设置设为 PRE_10.0

  • 创建 TIN 数据集后,您可以使用编辑 TIN 工具对其进行修改,以将其他基于要素的测量值合并到 TIN 表面。 您还可以使用描绘 TIN 数据区域工具根据三角形边的最大长度定义哪些 TIN 三角形构成插值区域。 也可以通过交互式编辑修改 TIN 表面。

参数

标注说明数据类型
输出 TIN

将要生成的 TIN 数据集。

TIN
坐标系
(可选)

输出 TIN 的空间参考。 将空间参考设置为投影坐标系。 不建议使用地理坐标系,因为当以角度单位表示 x,y 坐标时无法确保 Delaunay 三角测量,这可能会对基于距离的计算(如坡度、体积和视线)的准确性产生负面影响。

Coordinate System
输入要素类
(可选)

将构成 TIN 定义的输入要素及其相关属性。

  • 输入要素 - 所包含的几何将要导入至 TIN 的要素。
  • 高度字段 - 输入要素的高程源。 可以使用输入要素属性表中的任何数值字段以及 Shape.Z(用于 3D 要素的 z 值)和 Shape.M(用于存储于几何中的 m 值)。 选择 <None> 关键字将导致要素的高程通过周围表面进行插值处理。
  • 类型 - 将定义 TIN 表面修整中要素的角色。 有关表面要素类型的详细信息,请参阅工具的使用提示。
  • 标签字段 - 将使用从输入要素属性表的整型字段中获得的值分配给 TIN 的数据元素的数值属性。
Value Table
约束型 Delaunay
(可选)

指定将与 TIN 隔断线一同使用的三角测量技术。

  • 未选中 - TIN 将使用符合 Delaunay 的三角测量,这可能会增密每条隔断线线段以生成多条三角形边。 这是默认设置。
  • 选中 - TIN 将使用约束型 Delaunay 三角测量,这会将各线段作为单独的边添加。 所有位置均支持 Delaunay 三角测量规则,但沿隔断线处除外,因为它无法增密。
Boolean

arcpy.ddd.CreateTin(out_tin, {spatial_reference}, {in_features}, {constrained_delaunay})
名称说明数据类型
out_tin

将要生成的 TIN 数据集。

TIN
spatial_reference
(可选)

输出 TIN 的空间参考。 将空间参考设置为投影坐标系。 不建议使用地理坐标系,因为当以角度单位表示 x,y 坐标时无法确保 Delaunay 三角测量,这可能会对基于距离的计算(如坡度、体积和视线)的准确性产生负面影响。

Coordinate System
in_features
[[in_features, height_field, SF_type, tag_value],...]
(可选)

将构成 TIN 定义的输入要素及其相关属性。

  • in_features - 所包含的几何将要导入至 TIN 的要素。
  • height_field - 输入要素的高程源。 可以指定输入要素属性表中的任何数值字段以及 Shape.Z(用于 3D 要素的 z 值)和 Shape.M(用于随几何一同存储的 m 值)。 选择 <None> 关键字将导致要素的高程通过周围表面进行插值处理。
  • sf_type - 将定义 TIN 表面中输入要素的角色。 有效选项取决于输入要素的几何。 可将点和多点要素定义为 Mass_Points,用于构成以 TIN 数据结点形式存储的高程值。 通过指定 Hard_LineSoft_Line 可将线要素指定为 Mass_Points 或隔断线。 通过指定 Hard_ClipSoft_Clip,面要素可表示插值边界;通过指定 Hard_EraseSoft_Erase,面要素可表示不包含数据的内部部分;通过指定 Hard_ReplaceSoft_Replace,面要素可表示高度恒定的区域。 此外,通过指定 Hardvalue_FillSoftvalue_Fill,面还可以用于分配整型属性值。
  • tag_field - 将从输入要素属性表的整型字段中派生的数值属性,其值可用于将基本形式的属性分配给 TIN 的数据元素。 指定 <None>,将不会分配标签值。
Value Table
constrained_delaunay
(可选)

指定将与 TIN 隔断线一同使用的三角测量技术。

  • DELAUNAYTIN 将使用符合 Delaunay 的三角测量,这可能增密每条隔断线线段以生成多条三角形边。 这是默认设置。
  • CONSTRAINED_DELAUNAYTIN 将使用约束型 Delaunay 三角测量,这会将各线段作为单独的边添加。 所有位置均支持 Delaunay 三角测量规则,但沿隔断线处除外,因为它无法增密。
Boolean

代码示例

CreateTin 示例 1(Python 窗口)

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

arcpy.env.workspace = "C:/data"
arcpy.ddd.CreateTin("NewTIN", "NAD 1983 StatePlane California II FIPS 0402 (Feet).prj", 
                   "points.shp Shape.Z masspoints", "constrained_delaunay")
CreateTin 示例 2(独立脚本)

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

'''****************************************************************************
Name: Define Data Boundary of LAS File
Description: This script demonstrates how to delineate data boundaries of 
             LAS files with irregularly clustered points. It is intended for 
             use as a script tool with one input LAS file.
****************************************************************************'''
# Import system modules
import arcpy

# Set local variables
inLas = arcpy.GetParameterAsText(0)  # input LAS file
ptSpacing = arcpy.GetParameterAsText(1)  # LAS point spacing
classCode = arcpy.GetParameterAsText(2)  # List of integers
returnValue = arcpy.GetParameterAsText(3)  # List of strings
outTin = arcpy.GetParameterAsText(4)  # TIN created to delineate data area
outBoundary = arcpy.GetParameterAsText(5)  # Polygon boundary file

try:
    # Execute LASToMultipoint
    lasMP = arcpy.CreateUniqueName('lasMultipoint', 'in_memory')
    arcpy.ddd.LASToMultipoint(inLas, LasMP, ptSpacing, class_code, 
                             "ANY_RETURNS", "", sr, inFormat, zfactor)
    # Execute CreateTin
    arcpy.ddd.CreateTin(outTin, sr, "{0} Shape.Z masspoints"\
                       .format(lasMP), "Delaunay")
    # Execute CopyTin
    arcpy.ddd.CopyTin(outTin, "{0}_copy".format(outTin))
    # Execute DelineateTinDataArea
    maxEdge = ptSpacing * 4
    arcpy.ddd.DelineateTinDataArea(outTin, maxEdge, "PERIMETER_ONLY")
    # Execute TinDomain
    arcpy.ddd.TinDomain(outTin, outBoundary, "POLYGON")
        
except arcpy.ExecuteError:
    print(arcpy.GetMessages())
except Exception as err:
    print(err)

相关主题