通视性 (3D Analyst)
摘要
确定视线穿过潜在障碍物的可见性。潜在障碍物可以是栅格、TIN、多面体和拉伸面或线的任意组合。
用法
-
只有输入线的端点用于定义观察点和目标点。理想的视线应是简单的直线,包括两个折点,分别代表用于确定可见性的观测点和目标位置。
如果观测位置通过点要素和位于不同要素类中的目标位置标识,请使用构造视线为此工具生成输入。
此工具不会创建新输出;而是向输入视线要素类添加新属性。如果不希望他人获得您的输入数据,则复制此数据将副本用作输入。
输入视线几何类型应该是 PolylineZ(含有 Z 值的 3D 线),以便进行有效分析。
输入障碍物可以是表面和/或要素的任意组合。表面必须是栅格或 TIN。各个障碍物要素图层的几何类型必须是多面体、线或面。每个线要素或面要素图层必须有基本高度和拉伸信息,否则将忽略它们的内容。
各个输入视线可包含两个以上的折点,但仅使用第一个和最后一个折点。因此,各个视线将始终是直线。
各个视线的第一个和最后一个折点的 Z 值是所用 Z 值的唯一源。
分析结果保存在整型字段的输入视线要素属性表中。默认情况下,此字段的名称是 VISIBLE,但名称可通过可见字段名参数更改。
结果可以是值 1 或值 0 的其中之一。值 1 指示视线没有被障碍物参数中指定的任何潜在障碍物所阻碍,这意味着其起点和终点彼此可见。值 0 指示视线至少被一个表面或要素所阻碍。
如果结果字段(如 VISIBLE)已存在于视线要素类中,则将覆盖其内容。如果通过对话框运行工具,则在工具检测到字段已存在后将出现警告。无论以何种方式运行工具(例如对话框或 Python 窗口),如果已将结果写入到现有字段中,那么警告消息将添加到结果消息中,提示可能会覆盖数据。
由于进行障碍物检查不必投影数据(可能多次),如果所有输入都在同一空间参考中进行,工具将运行得更加快速。这尤其适用于彼此相同的空间参考中的所有障碍物;视线的空间参考并不十分重要,因为它们易于投影。
- 与通视分析工具不同,此工具会确定视线是否受到阻碍,而不是第一次受到阻碍的位置。未保留何种障碍使给定视线受到阻碍的记录。
如果希望各个视线在特定方向(方位角和垂直角)上,则可能在运行此工具前,使用构造视线工具生成视线时,将此信息写入到视线中。
此工具用于修改输入数据。有关详细信息以及避免数据被意外更改的策略,请参阅无输出的工具。
语法
参数 | 说明 | 数据类型 |
sight_lines |
3D 视线。 | Feature Layer |
obstructions [obstructions,...] |
阻碍视线的一个或多个要素类和/或表面。 | Feature Layer, Raster Layer, TIN Layer |
visible_field (可选) |
要存储可见性结果的字段的名称。生成的值 0 表示视线的起点和终点相互不可见。值 1 表示视线的起点和终点相互可见。默认字段名称为 VISIBLE。 | String |
代码实例
下面的示例演示了如何在 Python 窗口中使用此工具:
arcpy.CheckOutExtension("3D")
arcpy.env.workspace = "C:/data"
arcpy.Intervisibility_3d("sightlines.shp", "3dbuildings.shp;topo_tin", "Visibility")
下面的示例演示了如何在独立 Python 脚本中使用此工具:
此脚本演示如何根据以表面表示的障碍物和/或以多面体表示的建筑物来计算视线的通视性。
# Import system modules
import arcpy
try:
# Checking out 3D Analyst Extension
arcpy.CheckOutExtension("3D")
# Set environments
arcpy.env.workspace = 'C:/data'
# Setting up input and output variables
sightlines = "My_Sightlines.shp"
surface = "DTM_Tin"
buildings = "My_3D_Buildings.shp"
viz_field_name = "Visibility"
print("Calculating Intervisibility...")
arcpy.Intervisibility_ddd(
sightlines, surface + ';' + buildings, viz_field_name)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
finally:
arcpy.CheckInExtension("3D")