Add Feature Class To Terrain (3D Analyst)


Adds one or more feature classes to a terrain dataset.



AddFeatureClassToTerrain_3d (in_terrain, in_features)
ParameterExplanationData Type

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

Terrain Layer
[[in_feature_class, height_source, SF_type, group, min_resolution, max_resolution, overview, embedded, embedded_fields, anchored],...]

The feature classes being added to the terrain. Each feature class must reside in the same feature dataset as the terrain, and properties that define the feature's role in the terrain must be specified.

The dialog box can be resized to increase its width in the event the default column width is too small.

Feature class properties:

in_feature_class—The name of the input feature class being added to the terrain dataset.

height_source—The field supplying height values for the features. All numeric fields will be listed as available options. If the feature class is z-enabled, the feature's geometry field is included in the list and selected as the default value. If the feature class is not z-enabled, the keyword <None> will be provided by default. Z-less features have no heights and their values are interpolated from the surface before they get added.

SF_type—This represents the Surface Feature Type. It defines how the features are treated when triangulating the surface. The options include mass points, breaklines, and several polygon types. Breaklines and polygons also have hard and soft qualifiers, which indicate to an interpolator whether the surface crosses over the features smoothly (soft) or with a potentially sharp discontinuity (hard).

group—Thematically similar data, representing the same geographic features, but at different levels of detail, are placed into groups. Feature classes belonging to the same group are assigned the same value. For example, if there are two study area boundary features where one contains a very detailed boundary used for large-scale applications and another with a coarse boundary, both can be assigned to the same group to ensure there is no overlap in their respective display scales. This parameter only applies to breaklines and polygon surface types.

min_resolution and max_resolution—Defines the pyramid resolution ranges that the features will be enforced at in the terrain dataset. These parameters only apply to breaklines and polygon surface types.

overview—Indicates whether the feature class is enforced at the overview display of the terrain dataset, which is the coarsest representation that gets drawn by default when viewed at full extent. To maximize display performance, make sure that feature classes represented in the overview contain simplified geometry. 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 you have is detailed, consider generalizing it and use the coarser representation for the overview. The detailed version should be used in more detailed pyramid resolution levels. This parameter only applies to breaklines and polygon surface types.

embedded—Indicates whether the feature class will be embedded in the terrain dataset. Setting this option to true creates a copy of the feature's points. The embedded feature class will only be accessible through terrain dataset-related tools, but it will not be directly visible in ArcCatalog or selectable through the Add Data browser. This option only applies to multipoint feature classes.

embedded_fields—Identifies the lidar attributes to be stored with the embedded feature class. The LAS To Multipoint tool allows the storage of lidar attributes in a multipoint feature class.

anchored—Specifies 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

Code Sample

AddFeatureClassToTerrain example 1 (Python window)

The following sample demonstrates how to use this tool in the Python window:

import arcpy
from arcpy import env

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

The following sample demonstrates how to use 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
import exceptions, sys, traceback
from arcpy import env

# 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

    # Create the file gdb that will store the feature dataset, 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, 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")

except arcpy.ExecuteError:
    print arcpy.GetMessages()
    # Get the traceback object
    tb = sys.exc_info()[2]
    tbinfo = traceback.format_tb(tb)[0]
    # Concatenate error information into message string
    pymsg = "PYTHON ERRORS:\nTraceback info:\n{0}\nError Info:\n{1}"\
          .format(tbinfo, str(sys.exc_info()[1]))
    msgs = "ArcPy ERRORS:\n {0}\n".format(arcpy.GetMessages(2))
    # Return python error messages for script tool or Python Window


Related Topics

Licensing Information

ArcView: Requires 3D Analyst
ArcEditor: Requires 3D Analyst
ArcInfo: Requires 3D Analyst