ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • 帮助
  • Sign Out
ArcGIS Desktop

ArcGIS Online

专为贵组织打造的制图平台

ArcGIS Desktop

全面的专业性 GIS

ArcGIS Enterprise

面向企业的 GIS

ArcGIS Developers

用于构建位置感知应用程序的工具

ArcGIS Solutions

适用于行业的免费模板地图和应用程序

ArcGIS Marketplace

获取适用于组织的应用程序和数据

  • 文档
  • 支持
Esri
  • 登录
user
  • 我的个人资料
  • 登出

ArcMap

  • 主页
  • 入门
  • 地图
  • 分析
  • 管理数据
  • 工具
  • 扩展模块

创建 Terrain

  • 描述
  • 使用方法
  • 语法
  • 代码示例
  • 环境
  • 许可信息

描述

创建新的 terrain 数据集。

使用方法

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

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

  • 用于构造 terrain 的地理处理工具适用于 Python 脚本和“模型构建器”中的数据自动化操作。若要交互式创建新 terrain,请考虑使用 ArcCatalog 中的 Terrain 向导或目录窗口。要访问 Terrain 向导,右键单击要素数据集,然后单击新建 > Terrain。

语法

arcpy.ddd.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 窗口中使用此工具。

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

相关主题

  • 数据管理工具集概览
  • 有关表面的基础知识
  • 表面格式
  • 什么是 terrain 数据集?
  • 使用 terrain 数据集的优势
  • 使用地理处理工具构建 terrain 数据集
  • 平均点间距
  • terrain 金字塔

ArcGIS Desktop

  • 主页
  • 文档
  • 支持

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

关于 Esri

  • 关于我们
  • 招贤纳士
  • Esri 博客
  • 用户大会
  • 开发者峰会
Esri
分享您的想法。
Copyright © 2021 Esri. | 隐私政策 | 法律声明