视域 2 (3D Analyst)

需要 Spatial Analyst 许可。

需要 3D Analyst 许可。

描述

使用测地线方法,确定对一组观察点要素可见的栅格表面位置

了解有关“视域 2”工具工作原理的详细信息

插图

包含频数选项的视域 2 插图
显示在山体阴影高程表面上、包含频数选项的视域 2 输出
包含观察点选项的视域 2 插图
显示在山体阴影高程表面上、包含观察点选项的视域 2 输出

使用方法

  • 该工具执行两种类型的可见性分析(频数和观察点),均可通过分析类型参数进行设置。

  • 要确保输出的精度,请为输入栅格分配垂直坐标系(如果输入栅格没有此坐标系)。

  • 视域 2不需要 Z 因子参数。它将使用垂直 (Z) 单位和来自输入栅格空间参考的地图 (XY) 单位从内部计算 Z 因子。

  • 常见于高分辨率数据中的包含噪音的输入栅格可能会产生一些意外结果。运行此工具之前,您可以在预处理步骤中更正数据。如果 ArcGIS Spatial Analyst 扩展模块可用,则可在执行视域化操作前首先使用焦点统计过滤器工具来消除错误的影响。

  • 若要对输入栅格进行重采样,需使用双线性技术。例如,当输出栅格与输入栅格的坐标系统、范围或像元大小不同时,可对输入栅格进行重采样。

  • 为了提高性能,您可以将外半径参数明确设置为表示分析感兴趣的最大可视距离值。

  • 默认情况下,分析方法参数使用 所有视线选项,通过该选项将给出最精确的输出。为了提高工具在处理时间方面的性能,可使用 周长视线选项。

  • 与高度有关的观察点参数,例如表面偏移观察点高程观察点偏移,可被指定为线性单位或字段。在计算过程中,线性单位值将被内部转换为输入栅格的 Z 单位。但是,如果线性单位未知或指定了数值字段,则系统将假定该值采用输入栅格的 Z 单位。

  • 与可视距离有关的观察点参数,例如内半径外半径,可被指定为线性单位或字段。在计算过程中,线性单位值将内部转换为输入栅格的 XY 单位。但是,如果线性单位未知或指定了数字字段,则系统将假定该值采用输入栅格的 XY 单位。

  • 为观察点参数指定的字段,如表面偏移观察点偏移,可以是包含数值和单位的字符串类型。例如,如果为观察点偏移指定了字段 obs_height,则它可以包含像 '6 Feet' 一类的值。

    在脚本中,可以各种形式的字符串指定观察点参数,比如 observer_offset。在每种形式中,都会从字符串中解析一个值和一个线性单位。下表列出了一些示例输入字符串以及如何为每种情况确定线性单位。对于其他参数,您可以遵循相同的模式。

    观察点偏移的输入字符串示例使用线性单位

    ' ''#'

    使用默认值和单位:1 米。

    '6'

    观察点偏移为 6,但由于未指定单位,因此该工具将采用默认单位:米。

    '6 Feet'

    观察点偏移为 6 英尺。

    '6 Unknown'

    观察点偏移为 6,但由于未指定单位,因此该工具将采用默认单位:米。

    输入字符串和线性单位示例
  • 该工具将自动利用 GPU(图形处理单元)来提高工具的性能(如果您的系统已提供,且配置正确)。

    有关如何配置 GPU 设备的更多信息,请参阅使用 Spatial Analyst 进行 GPU 处理帮助主题中的 Spatial Analyst 扩展帮助。

  • 如果您不希望该工具使用系统中安装的可用 GPU 设备,则创建系统环境变量 CUDA_VISIBLE_DEVICES,将其值设置为 -1,然后重启应用程序。在此之后,该工具将仅使用 CPU 进行执行。要使您的工具再次使用 GPU 设备,可删除系统环境变量 CUDA_VISIBLE_DEVICES 或者将此环境变量的值设置为您想要使用的 GPU 设备的索引值(第一个为 0,第二个为 1,依此类推),然后重启应用程序。

语法

arcpy.3d.Viewshed2(in_raster, in_observer_features, out_raster, {out_agl_raster}, {analysis_type}, {vertical_error}, {out_observer_region_relationship_table}, {refractivity_coefficient}, {surface_offset}, {observer_elevation}, {observer_offset}, {inner_radius}, {inner_radius_is_3d}, {outer_radius}, {outer_radius_is_3d}, {horizontal_start_angle}, {horizontal_end_angle}, {vertical_upper_angle}, {vertical_lower_angle}, {analysis_method})
参数说明数据类型
in_raster

输入表面栅格。它可以是整型栅格或浮点型栅格。

可见性计算期间,输入栅格将转换为 3D 地心坐标系。输入栅格上的 NoData 像元不会阻止可视性的确定。

Raster Layer
in_observer_features

用于识别观察点位置的输入要素类。它可以是点要素、多点要素或折线要素。

可见性计算期间,输入要素类将转换为 3D 地心坐标系。计算将忽略表面栅格范围之外或 NoData 像元上的观察点。

Feature Layer
out_raster

输出栅格。

对于频率分析类型,当垂直错误参数为 0 或未指定时,输出栅格将记录输入表面栅格中每个像元位置可被输入观察点看到的次数。当垂直错误参数大于 0 时,输出栅格上的每个像元将记录该像元对所有观察点可见的可能性总和。对于 观察点分析类型,输出栅格将记录可见区域的唯一区域 ID,它们可通过输出观察点-区域关系表关联到观察点要素。

Raster Dataset
out_agl_raster
(可选)

地面以上 (AGL) 输出栅格。

AGL 结果是一个栅格,其中每个像元值都记录了为保证像元至少对一个观察点可见而需要向该像元添加的最小高度(若不添加此高度,像元不可见)。在此输出栅格中为已可见的像元分配 0。

当垂直错误参数为 0 时,输出 AGL 栅格为单波段栅格。当垂直错误参数大于 0 时,输出 AGL 栅格会被创建为三波段栅格以对输入栅格的随机效果作出解释。第一波段表示 AGL 平均值,第二波段表示最小 AGL 值,第三波段表示最大 AGL 值。

Raster Dataset
analysis_type
(可选)

选择要执行的可见性分析类型,是确定每个像元对观察点的可见性,还是识别各表面位置上可见的观察点。

  • FREQUENCY输出将记录输入表面栅格中每个像元位置对于输入观测位置(如点或观察折线要素的折点)可见的次数。这是默认设置。
  • OBSERVERS输出将精确识别从各栅格表面位置进行观察时可见的观察点。此分析类型所允许的最大输入观察点数为 32。
String
vertical_error
(可选)

表面高程值中不确定项(均方根错误,或称 RMSE)的数量。它是表示输入高程值预计误差的浮点值。为此参数分配的值大于 0 时,输出可见性栅格将为浮点型。此时,输出可见性栅格上的每个像元值将表示该像元对所有观察点可见的可能性总和。

当分析类型为观察点或分析方法为周长视线时,此参数将处于禁用状态。

Linear Unit
out_observer_region_relationship_table
(可选)

用于识别对于每个观察点都可见的区域的输出表。此表可关联到输入观察点要素类以及输出可见性栅格(用于识别对给定观察点可见的区域)。

只有在分析类型为观察点时,才会创建此输出。

Table
refractivity_coefficient
(可选)

空气中可见光的折射系数。

默认值为 0.13。

Double
surface_offset
(可选)

要添加到各像元 z 值的垂直距离,因为分析可见性时需要考虑该距离。它必须为正整数值或浮点值。

可以选择输入观察点数据集中的字段,也可以指定数值。

如果为此参数设置了一个值,则该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。

默认值为 0。

Linear Unit; Field
observer_elevation
(可选)

观察点或折点的表面高程。

可以选择输入观察点数据集中的字段,也可以指定数值。

如果未指定此参数,则会使用双线性插值法从表面栅格中获取观察点高程。如果为此参数设置了一个值,则该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。

Linear Unit; Field
observer_offset
(可选)

要添加到观察点高程的垂直距离。它必须为正整数值或浮点值。

可以选择输入观察点数据集中的字段,也可以指定数值。

如果为此参数设置了一个值,则该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。

默认值是 1 米。

Linear Unit; Field
inner_radius
(可选)

确定可见性的起始距离。小于此距离的像元在输出中不可见,但仍会妨碍内半径和外半径之间像元的可见性。

可以选择输入观察点数据集中的字段,也可以指定数值。

如果为此参数设置了一个值,则该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。

默认值为 0。

Linear Unit; Field
inner_radius_is_3d
(可选)

内半径参数的距离类型。

  • GROUND内半径将被视为 2D 距离。这是默认设置。
  • 3D内半径将被视为 3D 距离。
Boolean
outer_radius
(可选)

确定可见性的最大距离。超出此距离的像元将从分析中排除。

可以选择输入观察点数据集中的字段,也可以指定数值。

如果为此参数设置了一个值,则该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。

Linear Unit; Field
outer_radius_is_3d
(可选)

外半径参数的距离类型。

  • GROUND外半径将被视为 2D 距离。这是默认设置。
  • 3D外半径将被视为 3D 距离。
Boolean
horizontal_start_angle
(可选)

水平扫描范围的起始角度。该值应以度为单位,介于 0 至 360 之间,可为整数或浮点数,其中 0 指向北。默认值为 0。

可以选择输入观察点数据集中的字段,也可以指定数值。

如果为此参数设置了一个值,则该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。

Double; Field
horizontal_end_angle
(可选)

水平扫描范围的终止角度。该值应以度为单位,介于 0 至 360 之间,可为整数或浮点数,其中 0 指向北。默认值为 360。

可以选择输入观察点数据集中的字段,也可以指定数值。

如果为此参数设置了一个值,则该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。

Double; Field
vertical_upper_angle
(可选)

扫描的(相对于水平面的)垂直角上限。该值以度为单位,且可为整数或浮点数。允许的范围为 -90 到(并包括) 90。

此参数值必须大于垂直下角参数值。

可以选择输入观察点数据集中的字段,也可以指定数值。

如果为此参数设置了一个值,则该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。

默认值为 90(垂直向上)。

Double; Field
vertical_lower_angle
(可选)

扫描的(位于水平面下的)垂直角上限。该值以度为单位,且可为整数或浮点数。允许的范围是从 -90 到(但不包括)90。

此参数值必须小于垂直上角参数值。

可以选择输入观察点数据集中的字段,也可以指定数值。

如果为此参数设置了一个值,则该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。

默认值为 -90(垂直向下)。

Double; Field
analysis_method
(可选)

选择用于计算可见性的方法。此选项允许您牺牲一些精度以获得更好的性能。

  • ALL_SIGHTLINES视线会运行到栅格上的每个像元以创建可见区域。这是默认方法。
  • PERIMETER_SIGHTLINES视线仅会运行到可见区域周边的像元以创建可见区域。这种方法的性能比所有视线方法好,因为这种方法的计算中所运行的视线较少。
String

代码示例

Viewshed2 示例 1(Python 窗口)

本例在不使用任何观察点参数的情况下确定了一组观察点可见的表面位置。

import arcpy
from arcpy import env
env.workspace = "C:/data"
result = arcpy.Viewshed2_3d("elevation", "obser1.shp", "C:/output/outvwshd01",
                            "", "OBSERVERS", "", "C:/output/obstable01.dbf")
Viewshed2 示例 2(独立脚本)

此示例使用输入要素类中的属性作为观察点参数,确定了一组观察点可见的表面位置。

# Name: Viewshed_3d_Ex_02.py
# Description: Determines the raster surface locations visible to a set of
#              observer features.
# Requirements: 3D Analyst Extension

# Import system modules
import arcpy
from arcpy import env

# Set environment settings
env.workspace = "C:/data"


parmSurface = "elevation"
parmObservers = "obser2.shp"
parmOutput = "c:/output/outvshd02"
parmAGL = ""
parmAnalysisType="OBSERVERS"
parmVerticalError = ""
parmAnalysisRelationTable = "C:/output/obser_region2.dbf"
parmRefractCoeff = ""
parmSurfaceOffset = "offsetb"
parmObserverElevation="spot"
parm_ObserverOffset="offseta"
parmInnerRadius = "radius1"
parmInnerIs3D="False"
parmOuterRadius = "radius2"
parmOuterIs3D="True"
parmAz1 = "azimuth1"
parmAz2 = "azimuth2"
parmVert1 = "vert1"
parmVert2 = "vert2"

# Execute Viewshed2
result = arcpy.Viewshed2_3d(parmSurface, parmObservers, parmOutput, parmAGL,
parmAnalysisType, parmVerticalError, parmAnalysisRelationTable,
parmRefractCoeff, parmSurfaceOffset, parmObserverElevation,
parm_ObserverOffset,parmInnerRadius, parmInnerIs3D, parmOuterRadius,
parmOuterIs3D, parmAz1, parmAz2, parmVert1, parmVert2)

许可信息

  • Basic: 需要 3D Analyst 或 Spatial Analyst
  • Standard: 需要 3D Analyst 或 Spatial Analyst
  • Advanced: 需要 3D Analyst 或 Spatial Analyst

相关主题