Add Feature Class To Terrain (3D Analyst)

License Level:BasicStandardAdvanced

Summary

Adds one or more feature classes to a terrain dataset.

Usage

Syntax

AddFeatureClassToTerrain_3d (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.
  • SF 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

Code Sample

AddFeatureClassToTerrain example 1 (Python window)

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

import arcpy
from arcpy import env

arcpy.CheckOutExtension("3D")
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 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
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

try:
    arcpy.CheckOutExtension("3D")
    # 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:
    # 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
    arcpy.AddError(pymsg)
    arcpy.AddError(msgs)
finally:
    arcpy.CheckInExtension("3D")

Environments

Related Topics

Licensing Information

ArcGIS for Desktop Basic: Requires 3D Analyst
ArcGIS for Desktop Standard: Requires 3D Analyst
ArcGIS for Desktop Advanced: Requires 3D Analyst
11/8/2012