创建 TIN (3D Analyst)

摘要

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

使用情况

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

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

    • 可将点要素指定为离散多点,而这些点所提供的数据结点的 z 值用于表面的三角测量。
    • 可将线要素指定为离散多点和隔断线,表示沿某一表面的位置,该表面的坡度线性不连续,如山脊线、海岸线、路面边缘、建筑物轮廓等。
    • 此外,也可将面要素,以及用于定义数据区的裁剪要素、通过常量 z 值定义区域的替换要素(例如水体)和表示不存在数据的内部区域的擦除要素指定为离散多点和隔断线。
  • TIN 支持的最大结点数主要取决于计算机上连续的可用内存资源。 考虑将结点总数限制到 6 百万以下,以保持响应显示性能和总体可用性。 三角化网格面越大,越适合使用多分辨率 terrain 数据集进行管理。

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

参数

标注说明数据类型
输出 TIN

将要生成的 TIN 数据集。

TIN
坐标系
(可选)

应将输出 TIN 的空间参考设为投影坐标系。不建议使用地理坐标系,因为当以角度单位表示 XY 坐标时无法确保 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 的空间参考设为投影坐标系。不建议使用地理坐标系,因为当以角度单位表示 XY 坐标时无法确保 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.CreateTin_3d("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)

许可信息

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

相关主题