Create TIN (3D Analyst)

Summary

Creates a triangulated irregular network (TIN) dataset.

Usage

  • Avoid creating a TIN using a geographic coordinate system, as the Delaunay triangulation rule cannot be effectively enforced when the XY units are expressed in spherical coordinates.

  • The surface feature type defines how the input features will contribute to the definition of the triangulated surface.

    • Point features can be specified as mass points, which provide data nodes whose Z values are used in the triangulation of the surface.
    • Line features can be specified as mass points and breaklines, which represent locations along a surface with linear discontinuities in slope, such as ridge lines, shore lines, pavement edges, building footprints, and so on.
    • Polygon features can also be specified as mass points and breaklines, along with clip features that define the data area, replace features that define regions with constant Z values (e.g. water bodies), and erase features that indicate interior areas where data does not exist.
  • The maximum number of nodes supported by a TIN depends primarily on the free, contiguous memory resources available on the computer. Consider limiting the total number of nodes to under 6 million to maintain responsive display performance and overall usability. Larger triangulated surfaces are best managed using a multi-resolution terrain dataset.

  • Set the TIN storage version environment setting to PRE_10.0 if the TIN being created will be used in versions of ArcGIS Desktop earlier than 10.0.

Syntax

arcpy.3d.CreateTin(out_tin, {spatial_reference}, {in_features}, {constrained_delaunay})
ParameterExplanationData Type
out_tin

The TIN dataset that will be generated.

TIN
spatial_reference
(Optional)

The spatial reference of the output TIN should be set to a projected coordinate system. Geographic coordinate systems are not recommended because Delaunay triangulation cannot be guaranteed when the XY coordinates are expressed in angular units, which could have an adverse impact on the accuracy of distance-based calculations, such as slope, volume, and line of sight.

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

The input features and their related properties that will contribute to the definition of the TIN.

  • in_features—The feature whose geometry will be imported to the TIN.
  • height_field—The source of elevation for the input features. Any numeric field from the input feature's attribute table can be specified, along with Shape.Z for the Z values of 3D features, and Shape.M for the M values stored with the geometry. Choosing the <None> keyword will result in the feature's elevation being interpolated from the surrounding surface.
  • sf_type—The input feature's role in defining the TIN surface. The valid options depend on the geometry of the input features. Point and multipoint features can be defined as Mass_Points, which contribute elevation values that get stored as TIN data nodes. Line features can be designated as Mass_Points or breaklines by specifying Hard_Line or Soft_Line. Polygon features can represent the interpolation boundary by specifying Hard_Clip or Soft_Clip, interior portions with no data by choosing Hard_Erase or Soft_Erase, or areas of constant height by specifying Hard_Replace or Soft_Replace. Additionally, polygons can also be used to assign integer attribute values by specifying Hardvalue_Fill or Softvalue_Fill.
  • tag_field—A numeric attribute derived from an integer field in the input feature's attribute table whose values can be used to assign a basic form of attribution to the TIN's data elements. Specifying <None> will result in no tag values being assigned.
Value Table
constrained_delaunay
(Optional)

Specifies the triangulation technique used along the breaklines of the TIN.

  • DELAUNAYThe TIN will use Delaunay conforming triangulation, which may densify each segment of the breaklines to produce multiple triangle edges. This is the default.
  • CONSTRAINED_DELAUNAYThe TIN will use constrained Delaunay triangulation, which will add each segment as a single edge. Delaunay triangulation rules are honored everywhere except along breaklines, which will not get densified.
Boolean

Code sample

CreateTin example 1 (Python window)

The following sample demonstrates the use of this tool in the Python window.

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 example 2 (stand-alone script)

The following sample demonstrates the use of this tool in a stand-alone Python script.

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

Licensing information

  • Basic: Requires 3D Analyst
  • Standard: Requires 3D Analyst
  • Advanced: Requires 3D Analyst

Related topics