描述
创建新的 terrain 数据集。
使用
平均点间距参数的值应反映terrain 中使用的数据的合理近似值,因为该参数值将用于定义优化数据分析和显示性能的 terrain 内部切片的大小。每个切片大约包含不超过 200,000 个源高程点。如果数据在不同位置集聚的密度差异极大,则指定的值应该更偏重于较小的间距。
要完成 terrain,请使用添加 Terrain 金字塔等级来指定金字塔定义,然后使用向 Terrain 添加要素类来引用构成表面的数据源,最后使用构建 Terrain 来完成对 Terrain 的构建。
用于构造 terrain 的地理处理工具适用于 Python 脚本和“模型构建器”中的数据自动化操作。若要交互式创建新 terrain,请考虑使用 ArcCatalog 中的 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 金字塔的点细化方法。
| String |
windowsize_method (可选) | 用于在由窗口大小定义的区域中选择点的条件。仅当在 pyramid_type 参数中指定 WINDOWSIZE 时,此参数才适用。
| String |
secondary_thinning_method (可选) | 当正在使用窗口大小金字塔时,指定外加的细化选项来减少在平坦区域上所用的点数。如果某个区域内点的高度均在所提供的二次细化阈值参数值的范围内,则可将该区域视为平坦区域。在较高的分辨率金字塔等级下它的效果更明显,因为较小的区域更可能比较大的区域平坦。
| String |
secondary_thinning_threshold (可选) | 选择 WINDOWSIZE 过滤器后,用于激活二次细化的垂直阈值。该值应等于或大于数据的垂直精度。 | Double |
派生输出
名称 | 说明 | 数据类型 |
derived_out_terrain | 新 terrain 数据集。 | 地形 |
代码示例
CreateTerrain 示例 1(Python 窗口)
下面的示例演示了如何在 Python 窗口中使用此工具。
import arcpy
from arcpy import env
arcpy.CheckOutExtension('3D')
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
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")
环境
许可信息
- Basic: 需要 3D Analyst
- Standard: 需要 3D Analyst
- Advanced: 需要 3D Analyst