Add Feature Class To Terrain (3D Analyst)

Summary

Adds one or more feature classes to a terrain dataset.

Usage

  • Input features must reside in the same feature dataset as the terrain dataset.

  • Terrain dataset must already have one or more pyramid levels defined.

  • Depending on the surface type associated with features added to a terrain, the terrain dataset may need to be rebuilt using Build Terrain. The terrain dataset's Properties dialog box in ArcCatalog and the terrain layer's Properties dialog box in ArcMap both provide an indication as to whether the dataset needs to be rebuilt.

  • Consider enabling the overview option for breakline and polygon surface feature types only if the features contain simplified geometry and are visually relevant for the anticipated display scale. For example, breaklines may not be visible enough to matter at an overview display, whereas a clip polygon would be useful. If the boundary feature is detailed, consider generalizing it and use the coarser representation for the overview. The detailed version should be used at display scales more suited for its resolution of detail.

  • For terrain datasets stored in an enterprise geodatabase:

    • The target terrain cannot be registered as versioned.
    • The input feature class cannot be registered as versioned.

Syntax

AddFeatureClassToTerrain(in_terrain, in_features)
ParameterExplanationData Type
in_terrain

The terrain to which feature classes will be added. The terrain dataset must already have one or more pyramid levels created.

Terrain Layer
in_features
[[in_features, height_field, SF_type, group, min_resolution, max_resolution, overview, embed, embed_name, embed_fields, anchor],...]

Identifies features being added to the terrain. Each feature must reside in the same feature dataset as the terrain and have its role defined through the following properties:

  • Input FeaturesName of the feature class being added to the terrain.
  • Height FieldField containing the feature's height information. Any numeric field can be specified, and z-enabled features can also choose the geometry field. If the <none> option is chosen, z-values are interpolated from the surface.
  • TypeSurface feature type that defines how the features contributes to the terrain. Mass points denote features that contribute z-measurements; breaklines denote linear features with known z-measurements, and several polygon types. Breaklines and polygon-based feature types also have hard and soft qualifiers that define the interpolation behavior around the feature's edges when exporting to raster. Soft features exhibit gradual changes in slope, whereas hard features represent sharp discontinuities.
  • GroupDefines the group of each contributing feature. Unspecification of breaklines and polygon surface features representing the same geographic features at different levels of detail are intended for display at certain scale ranges. Data representing the same geographic features at different levels of detail can be grouped by assigning the same numeric value. For example, assigning two boundary features with a high and low level of detail to the same group would ensure there is no overlap in their associated display scale range.
  • Min/Max ResolutionDefines the range of pyramid resolutions at which the feature is enforced in the terrain. Mass points must use the smallest and largest range of values.
  • OverviewIndicates whether the feature is enforced at the coarsest representation of the terrain dataset. To maximize display performance, make sure that feature classes represented in the overview contain simplified geometry. Only valid for feature types other than mass points.
  • EmbedSetting this option to TRUE indicates the source features will be copied to a hidden feature class that will be referenced by and only available to the terrain. Embedded features will not be directly viewable, as they can only be accessed through terrain tools. Only valid for multipoint features.
  • Embed NameName of the embedded feature class. Only applies if the feature is being embedded.
  • Embed FieldsSpecifies BLOB field attributes to be retained in the embedded feature class. These attributes can be used to symbolize the terrain. LAS attribution can be stored in BLOB fields of multipoint features through the LAS To Multipoint tool.
  • AnchorSpecifies whether the point feature class will be anchored through all terrain pyramid levels. Anchor points are never filtered or thinned away to ensure they persist in the terrain surface. This option only applies to single-point feature classes.
Value Table

Derived Output

NameExplanationData Type
derived_out_terrain

The updated terrain.

Terrain Layer

Code sample

AddFeatureClassToTerrain example 1 (Python window)

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

arcpy.env.workspace = "C:/data"
terrain_data = ["terrain.gdb/terrainFDS/points2", "SHAPE", "masspoints", 2, 0, 
                10, "true", "false", "points_embed", "<None>", "false"]
arcpy.AddFeatureClassToTerrain_3d("test.gdb/featuredataset/terrain", terrain_data)
AddFeatureClassToTerrain example 2 (stand-alone script)

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

"""****************************************************************************
Name: Create Terrain from TIN
Description: This script demonstrates how to create a terrain dataset using
             features extracted from a TIN. It is particularly useful in
             situations where the source data used in the TIN is not available,
             and the amount of data stored in the TIN proves to be too large
             for the TIN. The terrain's scalability will allow improved
             display performance and faster analysis. The script is designed
             to work as a script tool with 5 input arguments.
****************************************************************************"""
# Import system modules
import arcpy

# Set local variables
tin = arcpy.GetParameterAsText(0) # TIN used to create terrain
gdbLocation = arcpy.GetParameterAsText(1) # Folder that will store terran GDB
gdbName = arcpy.GetParameterAsText(2) # Name of terrain GDB
fdName = arcpy.GetParameterAsText(3) # Name of feature dataset
terrainName = arcpy.GetParameterAsText(4) # Name of terrain

try:
    # Create the file gdb that will store the feature dataset
    arcpy.management.CreateFileGDB(gdbLocation, gdbName)
    gdb = '{0}/{1}'.format(gdbLocation, gdbName)
    # Obtain spatial reference from TIN
    SR = arcpy.Describe(tin).spatialReference
    # Create the feature dataset that will store the terrain
    arcpy.management.CreateFeatureDataset(gdb, fdName, SR)
    fd = '{0}/{1}'.format(gdb, fdName)
    # Export TIN elements to feature classes for terrain
    arcpy.AddMessage("Exporting TIN footprint to define terrain boundary...")
    boundary = "{0}/boundary".format(fd)
    # Execute TinDomain
    arcpy.ddd.TinDomain(tin, tinDomain, 'POLYGON')
    arcpy.AddMessage("Exporting TIN breaklines...")
    breaklines = "{0}/breaklines".format(fd)
    # Execute TinLine
    arcpy.ddd.TinLine(tin, breaklines, "Code")
    arcpy.AddMessage("Exporting TIN nodes...")
    masspoints = "{0}/masspoints".format(fd)
    # Execute TinNode
    arcpy.ddd.TinNode(sourceTIN, TIN_nodes)
    arcpy.AddMessage("Creating terrain dataset...")
    terrain = "terrain_from_tin"
    # Execute CreateTerrain
    arcpy.ddd.CreateTerrain(fd, terrainName, 10, 50000, "",
                            "WINDOWSIZE", "ZMEAN", "NONE", 1)
    arcpy.AddMessage("Adding terrain pyramid levels...")
    terrain = "{0}/{1}".format(fd, terrainName)
    pyramids = ["20 5000", "25 10000", "35 25000", "50 50000"]
    # Execute AddTerrainPyramidLevel
    arcpy.ddd.AddTerrainPyramidLevel(terrain, "", pyramids)
    arcpy.AddMessage("Adding features to terrain...")
    inFeatures = "{0} Shape softclip 1 0 10 true false boundary_embed <None> "\
             "false; {1} Shape masspoints 1 0 50 true false points_embed "\
             "<None> false; {2} Shape softline 1 0 25 false false lines_embed "\
             "<None> false".format(boundary, masspoints, breaklines)
    # Execute AddFeatureClassToTerrain
    arcpy.ddd.AddFeatureClassToTerrain(terrain, inFeatures)
    arcpy.AddMessage("Building terrain...")
    # Execute BuildTerrain
    arcpy.ddd.BuildTerrain(terrain, "NO_UPDATE_EXTENT")
    arcpy.GetMessages()

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