构建 Terrain (3D Analyst)

摘要

执行分析和显示 terrain 数据集时所需的任务。

使用情况

  • 在初始定义参与 terrain 的要素、对参与 terrain 的要素进行后续修改,或修改 terrain 金字塔定义之后,使用此工具。

  • 与执行各单个编辑后运行构建相比,在批量执行编辑后进行构建更有效率。

参数

标注说明数据类型
输入 Terrain

待处理的 terrain 数据集。

Terrain Layer
更新范围
(可选)

当数据区域在编辑过程中变小时,将重新计算基于窗口大小的 terrain 数据集的数据范围。如果数据范围增加,或者 terrain 数据集是基于 z 容差的,则无需使用此命令。它会扫描所有 terrain 数据以确定新范围。

  • 保持范围 将不会重新计算 terrain 数据集的范围。这是默认设置。
  • 更新范围 将会重新计算 terrain 数据集的范围。
String

派生输出

标注说明数据类型
更新后的输入 Terrain

更新后的 terrain。

地形图层

arcpy.ddd.BuildTerrain(in_terrain, {update_extent})
名称说明数据类型
in_terrain

待处理的 terrain 数据集。

Terrain Layer
update_extent
(可选)

当数据区域在编辑过程中变小时,将重新计算基于窗口大小的 terrain 数据集的数据范围。如果数据范围增加,或者 terrain 数据集是基于 z 容差的,则无需使用此命令。它会扫描所有 terrain 数据以确定新范围。

  • NO_UPDATE_EXTENT 将不会重新计算 terrain 数据集的范围。这是默认设置。
  • UPDATE_EXTENT 将会重新计算 terrain 数据集的范围。
String

派生输出

名称说明数据类型
derived_out_terrain

更新后的 terrain。

地形图层

代码示例

BuildTerrain 示例 1(Python 窗口)

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

arcpy.env.workspace = 'C:/data'
arcpy.BuildTerrain_3d('test.gdb/featuredataset/terrain')
BuildTerrain 示例 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

# 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:
    # 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 Exception as err:
    print(err)

许可信息

  • Basic: 需要 3D Analyst
  • Standard: 需要 3D Analyst
  • Advanced: 需要 3D Analyst

相关主题