向 Terrain 添加要素类 (3D Analyst)
摘要
向 terrain 数据集中添加一个或多个要素类。
用法
-
输入要素类必须与 terrain 数据集位于同一个要素数据集中。
-
terrain 数据集必须已创建一个或多个金字塔等级。
-
根据与添加到 terrain 中的要素相关联的表面类型,可能需要使用构建 Terrain 重新构建 terrain 数据集。ArcCatalog 中 terrain 数据集的属性 对话框和 ArcMap 中 terrain 图层的属性 对话框都会指明数据集是否需要重新构建。
-
对于存储在 SDE 中的 terrain 数据集:
- 目标 terrain 不能注册为版本。
- 输入要素类不能注册为版本。
语法
参数 | 说明 | 数据类型 |
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 |
代码示例
下面的示例演示了如何在 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)
下面的示例演示了如何在独立 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")