创建 Terrain (3D Analyst)

描述

创建新的 terrain 数据集。

使用方法

  • 平均点间距参数的值应反映terrain 中使用的数据的合理近似值,因为该参数值将用于定义优化数据分析和显示性能的 terrain 内部切片的大小。每个切片大约包含不超过 200,000 个源高程点。如果数据在不同位置集聚的密度差异极大,则指定的值应该更偏重于较小的间距。

  • 要完成 terrain,请使用添加 Terrain 金字塔等级来指定金字塔定义,然后使用向 Terrain 添加要素类来引用构成表面的数据源,最后使用构建 Terrain 来完成对 Terrain 的构建。

语法

CreateTerrain(in_feature_dataset, out_terrain_name, average_point_spacing, {max_overview_size}, {config_keyword}, {pyramid_type}, {windowsize_method}, {secondary_thinning_method}, {secondary_thinning_threshold})
参数说明数据类型
in_feature_dataset

将包含 terrain 数据集的要素数据集。

Feature Dataset
out_terrain_name

Terrain 数据集的名称。

String
average_point_spacing

对 terrain 建模时所用数据点之间的平均水平距离。对于摄影测量、激光雷达和声纳测量等基于传感器的测量,通常已知所需使用的间距。间距应以要素数据集坐标系的水平单位来表示。

Double
max_overview_size
(可选)

Terrain 概貌类似于缩略图概念。它是 terrain 数据集的最粗略表示,其最大大小表示为创建概貌而进行采样的测量点的数量上限。

Long
config_keyword
(可选)

用于优化企业级数据库中 terrain 存储的配置关键字。

String
pyramid_type
(可选)

用来构造 terrain 金字塔的点细化方法。

  • WINDOWSIZE使用在 windowsize_method 参数中指定的条件,通过在由给定窗口大小定义的区域中选择数据点来执行细化,其中给定的窗口大小将根据每个金字塔等级而确定。
  • ZTOLERANCE通过指定相对于全分辨率数据点的每个金字塔等级的垂直精度来执行细化。
String
windowsize_method
(可选)

用于在由窗口大小定义的区域中选择点的条件。仅当在 pyramid_type 参数中指定 WINDOWSIZE 时,此参数才适用。

  • ZMIN具有最小高程值的点。
  • ZMAX具有最大高程值的点。
  • ZMEAN具有最接近所有高程值的平均值的点。
  • ZMINMAX具有最小和最大高程值的点。
String
secondary_thinning_method
(可选)

当正在使用窗口大小金字塔时,指定外加的细化选项来减少在平坦区域上所用的点数。如果某个区域内点的高度均在所提供的二次细化阈值参数值的范围内,则可将该区域视为平坦区域。在较高的分辨率金字塔等级下它的效果更明显,因为较小的区域更可能比较大的区域平坦。

  • NONE将不执行任何二次细化。这是默认设置。
  • MILD最适合保留线性间断处的地形(如建筑侧面和森林边界)。建议对包括地面点和非地面点的激光雷达数据使用该方法。该方法将抽稀最少的点。
  • MODERATE在性能和精度之间实现较好的折衷。该方法不像轻度抽稀方法那样保留很多细节,尽管消除更多点,但整体上这两种方法相差无几。
  • STRONG移除大多数点,但可能会无法保留应明显描绘的要素。该方法仅限于使用在坡度逐渐更改的表面。例如,高度抽稀对裸地激光雷达或深海探测数据具有效果。
String
secondary_thinning_threshold
(可选)

选择 WINDOWSIZE 过滤器后,用于激活二次细化的垂直阈值。该值应等于或大于数据的垂直精度。

Double

派生输出

名称说明数据类型
derived_out_terrain

新 terrain 数据集。

地形

代码示例

CreateTerrain 示例 1(Python 窗口)

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

arcpy.env.workspace = 'C:/data'
arcpy.CreateTerrain_3d('source.gdb/Redlands', 'Redlands_terrain',  5,
                      50000, '', 'WINDOWSIZE', 'ZMIN', 'NONE', 1)
CreateTerrain 示例 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

相关主题