天际线 (3D Analyst)
插图
用法
该分析基于功能性或虚拟表面上方的观察点进行,并也会考虑在分析时遇到的要素。当与其他工具结合使用时,尤其是与天际线障碍工具一起使用时,可以创建阴影体及其他类似要素。
天际线工具通常与天际线障碍物工具结合使用,但有时也与天际线图工具结合使用。其他天际线工具的应用程序在分析对 3D 飞行路径和走廊的威胁中进行了介绍。
天际线工具可以用来创建要素轮廓,并且通过天际线障碍工具可以将创建的轮廓拉伸成阴影体。有关详细信息,请参阅天际线工作原理。
如果生成的是要素轮廓而不是天际线,则一些参数的用法和描述将会有所不同。
如果没有指定功能性表面,则天际线将只由山脊线(地平线)组成。
如果没有指定功能性表面,则将使用从提供的半径和高程生成的虚拟表面。
-
只有输入观察点和输出要素类(天际线)为必须参数。
-
如果选中一个或多个要素,则将只会考虑选中的要素;否则,将考虑所有要素。
针对每个观察点都执行单独的天际线分析。根据每个观测点的观察,生成一条或多条线来表示天际线。
方位角增量值只会影响天际线任意山脊线部分的间隔长度,而不会影响到沿任何要素走向的天际线部分。
每一条输出线都有一个值,表示用于创建输出线所代表天际线的观察点要素的 FID。
若要创建一个或多个要素的阴影体,通常建议选中分段天际线复选框,这样每个参与天际线的要素都将有自己的折线。
在创建阴影体时,通常先运行天际线工具,每次运行只选择一个要素,然后在表示此要素的特定折线上运行天际线障碍工具。
输出几何为 3D 折线。
以下字段将会添加到包含天际线的输出要素类:
- OID - 天际线的 FID。
- 形状 - 天际线的几何。
- OBSV_PT_ID - 用于创建此天际线的观察点的 FID。
- ORIGFTR_ID - 要素的 FID,如建筑物。
以下字段将会添加到包含轮廓的输出要素类:
- FID - 轮廓的要素 ID。
- 形状 - 轮廓的几何。
- OBSV_PT_ID - 用于创建此轮廓的观察点的 FID。
- ORIGFTR_ID - 轮廓表示的原始要素(如建筑物)的 FID。
- DIR_VECT_X - 表示来自观察点的光线方向的单位矢量的 X 分量。
- DIR_VECT_Y - 表示来自观察点的光线方向的单位矢量的 Y 分量。
- DIR_VECT_Z - 表示来自观察点的光线方向的单位矢量的 Z 分量。
- FEAT_CTR_X - 原始要素(例如,建筑物)包络中心的 X 分量。
- FEAT_CTR_Y - 要素包络中心的 Y 分量。
- FEAT_CTR_Z - 要素包络中心的 Z 分量。
- BHND_CTR_X - 移动到要素后面的要素包络中心的 X 分量。
- BHND_CTR_Y - 移动到要素后面的要素包络中心的 Y 分量。
- BHND_CTR_Z - 移动到要素后面的要素包络中心的 Z 分量。
- USED_PARLL - 是否使用平行光线创建轮廓(1 代表是,0 代表否)。
- MADE_VERT - 是否使轮廓保持竖直,而不是垂直于光线(1 代表是,0 代表否)。
- MOVED_BHND - 是否将轮廓移动到要素后面,而不是将其留在要素中心(1 代表是,0 代表否)。
语法
参数 | 说明 | 数据类型 |
in_observer_point_features |
表示观察点的 3D 点;每一个 3D 点都有一个单独的天际线。 | Feature Layer |
out_feature_class |
在其中放置天际线的线要素类。此外,为包含要素轮廓,此要素类可以是多面体要素类。 | Feature Class |
in_surface (可选) |
用于确定地平线的功能性表面。 | LAS Dataset Layer; Raster Layer; TIN Layer; Terrain Layer |
virtual_surface_radius (可选) |
代替实际表面来定义地平线的虚拟表面的半径。必须为正值。如果提供了实际表面,则可忽略。默认值为 1,000。 | Linear Unit |
virtual_surface_elevation (可选) |
代替实际表面来定义地平线的虚拟表面的高程。如果提供了实际表面,则可忽略。默认值为 0。 | Linear Unit |
in_features (可选) |
在天际线分析中要使用的要素类。这些要素通常表示城市建筑等障碍物。 | Feature Layer |
feature_lod (可选) |
在天际线分析中检查每个要素的细节层次。
| String |
from_azimuth_value_or_field (可选) |
以度为单位的方位角。根据此方位角开始天际线分析。天际线分析以观察点为起点,并从“起始方位角”向右移动,直到“结束方位角”。方位角必须在负 360 和 360 之间。默认值为 0。 | Double; Field |
to_azimuth_value_or_field (可选) |
以度为单位的方向。根据此方向完成天际线分析。天际线分析以观察点为起点,并从“起始方位角”向右移动,直到“结束方位角”。该值必须大于“起始方位角”,且不得超过 360。默认值为 360。 | Double; Field |
azimuth_increment_value_or_field (可选) |
以度为单位的角度间隔。在“起始方位角”和“结束方位角”之间执行天际线分析时,应根据此值计算地平线。该值不得大于“结束方位角”与“起始方位角”的差值。默认值为 1。 | Double; Field |
max_horizon_radius (可选) |
从观察点位置应能搜索到地平线的最大距离。零值表明应没有施加限制。默认值为 0。 | Double |
segment_skyline (可选) |
输出不是只生成一条线来表示每个观察点的天际线,而是拆分为多条线。每一条线表示一个不同的要素,或者表示要素间地平线的一个拉伸。如果正在生成轮廓,那么此参数将指示是否使用发散光线;对于太阳阴影,此参数的状态通常为禁用或未选中。
| Boolean |
scale_to_percent (可选) |
表示放置每个天际线折点应依据的原始垂直角(地平线以上的角或高程角)或高程的缩放百分比。如果输入 0 或 100,则不会进行缩放。默认值为 100。 | Double |
scale_according_to (可选) |
确定缩放所依据的值。
| String |
scale_method (可选) |
计算折点所依据的缩放方法。
| String |
use_curvature (可选) |
表示根据功能性表面生成山脊线时,是否要考虑地球的曲率。
| Boolean |
use_refraction (可选) |
表示在通过功能性表面生成山脊线时是否应考虑大气折射。如果没有指定实际表面,则选中此复选框(或在 Python 中传送“REFRACTION”)将会创建轮廓而不是天际线。
| Boolean |
refraction_factor (可选) |
如果考虑大气折射,则应用标量值。默认值为 0.13。 | Double |
pyramid_level_resolution (可选) |
如果为功能性表面指定 terrain,则会通过 terrain 中的现有分辨率填充此参数。会选取其中一个现有分辨率来用于生成地平线。默认值为 0(z 容差),或全分辨率(窗口大小)。 | Double |
create_silhouettes (可选) |
指定输出要素是否表示可从观察点看到的轮廓。
| Boolean |
代码实例
下面的示例演示了如何在 Python 窗口中使用此工具:
import arcpy
from arcpy import env
arcpy.CheckOutExtension("3D")
env.workspace = "C:/data"
arcpy.Skyline_3d("observers.shp", "skyline_output.shp", "sample.gdb/featuredataset/terrain")
下面的示例演示了如何在独立 Python 脚本中使用此工具:
'''****************************************************************************
Name: Skyline Example
Description: This script demonstrates how to use the
Skyline tool.
****************************************************************************'''
# Import system modules
import arcpy
import exceptions, sys, traceback
from arcpy import env
try:
# Obtain a license for the ArcGIS 3D Analyst extension
arcpy.CheckOutExtension('3D')
# Set environment settings
env.workspace = 'C:/data'
# Set Local Variables
inPts = "observers.shp"
# Make sure output has a unique name
outFC = arcpy.CreateUniqueName("skyline_output.shp")
inSurface = "sample.gdb/featuredataset/terrain"
obstructionFCs = "buildings.shp; billboards.shp"
surfRad = "1000 meters"
surfElev = "100 meters"
LOD = "FULL_DETAIL"
fromAzim = 0
toAzim = 360
incAzim = 1
maxHorizRad = 0
segSky = "SEGMENT_SKYLINE"
scale = 100
scaleAcc = "ELEVATION"
scaleMethod = "SKYLINE_MAXIMUM"
# Execute Skyline
arcpy.Skyline_3d(inPts, outFC, inSurface, surfRad, surfElev,
obstructionFCs, LOD, fromAzim, toAzim, incAzim,
maxHorizRad, segSky, scale, scaleAcc, scaleMethod)
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)