添加表面信息 (3D Analyst)
摘要
归属从表面中获取的带有空间信息的要素。
用法
忽略 3D 要素的 Z 值。每个要素都会汇总与其几何相交的表面 Z 属性。点从表面上的 XY 位置获取 Z 值,线通过沿其长度插入表面测量值来获取 Z 属性,面则汇总其区域内的表面 Z 属性。
-
输出属性选项会写入到输入要素的属性表中。各要素定义被评估的表面属性的位置,以及可根据要素几何报告的属性类型:
要素几何
表面属性
点
从表面上点的 XY 坐标插入的点高程。
多点
多点记录中所有点的最小、最大和平均高程。
折线
沿着表面的线的 3D 距离。
沿着表面的线的最小、最大和平均高程和坡度。
面
与面重叠的表面的 3D 区域。
来自表面的最小、最大和平均高程和坡度。
坡度值以百分比单位(百分度)进行测量,线要素的坡度值沿着线的各线段进行计算。
- 最小坡度值根据坡度值最接近 0 或水平度的线段获得。
- 最大坡度根据具有最大计算值的线段获得。
- 平均坡度通过按 3D 长度对各坡度进行加权、然后确定平均值获得。这种计算方法会导致较长线段对结果值的影响比较短线段更大。
考虑应用噪点过滤器来排除以异常测量值为特征的表面参与到坡度计算中。线要素由捕捉表面剖面的折点来分段,按长度过滤这些线段会消除可能由不希望出现的表面测量值产生的短线段影响。同理,面要素的面积过滤器会排除三角化网格面中的狭长三角形参与到坡度计算中。对于栅格表面,像元质心子集用于构造可应用面积过滤器的三角化网格面。
语法
参数 | 说明 | 数据类型 |
in_feature_class |
定义位置的点、多点、折线或面要素,用于确定一个或多个表面属性。 | Feature Layer |
in_surface |
用于内插 z 值的 LAS 数据集、栅格、terrain 或 TIN 表面。 | LAS Dataset Layer; Raster Layer; Terrain Layer; TIN Layer |
out_property | 将添加到输入要素类属性表中的表面高程属性。下表汇总了可用属性关键字及其支持的几何类型:
| String |
method (可选) |
用于确定表面信息的插值方法。双线性插值法始终用于栅格表面,而下列选项可用三角化网格面中:
| String |
sample_distance (可选) |
用于内插 z 值的间距。默认情况下,如果输入表面是栅格,则使用栅格像元大小;如果输入是 terrain 或 TIN 数据集,则使用三角化网格面的自然增密。 | Double |
z_factor (可选) |
高程值将乘上的系数。此系数通常用于转换 Z 线性单位,以匹配 XY 线性单位的值。默认值为 1,此时高程值保持不变。 | Double |
pyramid_level_resolution (可选) |
此工具将使用 terrain 金字塔等级的 z 容差或窗口大小分辨率。默认值为 0(z 容差),或全分辨率(窗口大小)。 | Double |
noise_filtering (可选) |
排除以异常测量值为特征的部分表面参与到坡度计算过程中。线要素会提供长度过滤器,而面要素则提供面积过滤器,并且与任意一个过滤器选项对应的值都会以要素坐标系的线性单位进行评估。非坡度属性不受此参数影响。
| String |
代码实例
下面的示例演示了如何在 Python 窗口中使用此工具:
import arcpy
from arcpy import env
arcpy.CheckOutExtension("3D")
env.workspace = "C:/data"
arcpy.AddSurfaceInformation_3d("points.shp", "my_tin", "Z", "LINEAR")
下面的示例演示了如何在独立 Python 脚本中使用此工具:
'''*********************************************************************
Name: AddSurfaceInformation Example
Description: This script demonstrates how to use AddSurfaceInformation
on all 2D feature classes in a target workspace.
*********************************************************************'''
# Import system modules
import arcpy
from arcpy import env
import exceptions, sys, traceback
try:
arcpy.CheckOutExtension("3D")
# Set Local Variables
env.workspace = 'c:/data'
inSurface = 'fgdb.gdb/municipal/terrain'
pyramid = 5
method = "BILINEAR"
# Create list of feature classes
fcList = arcpy.ListFeatureClasses()
if fcList:
for fc in fcList:
desc = arcpy.Describe(fc)
# Determine if the feature is 2D
if not desc.hasZ:
if desc.shapeType == "Polygon":
# Desired properties separated by semi-colons
Prop = "Z_MIN;Z_MAX"
elif desc.shapeType == "Point":
Prop = "Z"
elif desc.shapeType == "Multipoint":
Prop = "Z_MIN;Z_MAX;Z_MEAN"
elif desc.shapeType == "Polyline":
Prop = "LENGTH_3D"
# Execute AddSurfaceInformation
arcpy.ddd.AddSurfaceInformation(fc, inSurface, Prop,
method, 15, 1, pyramid)
print "Completed adding surface information."
arcpy.CheckInExtension('3D')
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)