Add Feature Class To Terrain (3D Analyst)
Summary
Adds one or more feature classes to a terrain dataset.
Usage
-
Input feature classes must reside in the same feature dataset as the terrain dataset.
-
The terrain dataset must already have one or more pyramid levels created.
-
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.
-
For terrain datasets stored in SDE:
- The target terrain cannot be registered as versioned.
- The input feature class cannot be registered as versioned.
Syntax
Parameter | Explanation | Data 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_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
The following sample demonstrates how to use 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)
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 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")