向 Terrain 添加要素类 (3D Analyst)

摘要

向 terrain 数据集中添加一个或多个要素类。

用法

语法

AddFeatureClassToTerrain_3d (in_terrain, in_features)
参数说明数据类型
in_terrain

要素类将被添加到的 terrain。terrain 数据集必须已创建一个或多个金字塔等级。

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

要向 terrain 中添加的要素类。各要素类必须位于 terrain 所在的同一要素数据集中,并且必须指定用于定义要素在 terrain 中的角色的属性。

如果默认列宽过小,则可以调整对话框加大宽度。

要素类属性:

in_feature_class - 要添加至 terrain 数据集的输入要素类的名称。

height_source - 此字段提供要素的高度值。所有数值字段将以可用选项形式列出。如果要素类具有 z 值,则列表中将包括要素的几何字段,并且该字段会被选为默认值。如果要素类没有 z 值,则默认情况下将提供关键字 <无>。没有 Z 值的要素不包含高度,在添加之前,从表面对这些要素的值进行插值。

SF_type - 这表示表面要素类型。其定义三角化表面时处理要素的方式。选项包括离散多点、隔断线以及若干种面类型。隔断线和面也有软和硬之分,向插值器指明表面是平滑跨接各要素(软)还是具有潜在的明显中断(硬)。

组 - 将主题相似、表示相同地理要素但细节层次不同的数据归为一组。属于同一组的要素类会分配相同的值。例如,如果有两个研究区域边界要素,其中一个包含较精细的边界(用于大比例应用),而另一个的边界比较粗糙,则可将这两个要素分配给同一个组,以确保使用各自的显示比例显示时不会出现重叠。此参数只适用于隔断线和面要素表面类型。

min_resolution 和 max_resolution - 界定在 terrain 数据集中强制显示要素时的金字塔分辨率范围。这两个参数只适用于隔断线和面要素表面类型。

概貌 - 指示是否在 terrain 概貌数据集的显示中强制显示要素类,而该显示是以全图形式查看时默认绘制的最粗略表示。要最大限度地提高显示性能,请确保概貌中表示的要素类包含简化几何。例如,对于概貌显示情况,隔断线可能不会充分显示,而裁剪多边形将会很有用。如果边界要素很详细,则考虑将其概化,以便在概貌中使用较粗略的表示形式。使用较详细的版本时需要更详细的金字塔分辨率等级。此参数只适用于隔断线和面要素表面类型。

嵌入式 - 指示是否将要素类嵌入到 terrain 数据集中。将此选项设置为 true 会创建要素点的副本。嵌入的要素类只能通过 terrain 数据集相关工具进行访问,但是其在 ArcCatalog 中不能直接显示,也不能通过“添加数据”浏览器直接选择。此选项只适用于多点要素类。

embedded_fields - 标识要存储在嵌入式要素类中的雷达属性。“LAS 转多点”工具允许在多点要素类中存储雷达属性。

锚点 - 指定是否在所有 terrain 金字塔等级内定位点要素类。为确保锚点存在于 terrain 表面中,切勿过滤或细化掉这些点。此选项只适用于单点要素类。

Value Table

代码示例

向 Terrain 添加要素类 (AddFeatureClassToTerrain) 示例 1(Python 窗口)

下面的示例演示了如何在 Python 窗口中使用此工具:

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)
向 Terrain 添加要素类 (AddFeatureClassToTerrain) 示例 2(独立脚本)

下面的示例演示了如何在独立 Python 脚本中使用此工具:

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

环境

相关主题

许可信息

ArcView: 需要 3D Analyst
ArcEditor: 需要 3D Analyst
ArcInfo: 需要 3D Analyst

7/10/2012