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