测地线视域 (空间分析)

需要 Spatial Analyst 许可。

需要 3D Analyst 许可。

摘要

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

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

插图

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

使用情况

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

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

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

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

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

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

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

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

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

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

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

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

    ' ''#'

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

    '6'

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

    '6 Feet'

    观察点偏移为 6 英尺。

    '6 Unknown'

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

    输入字符串和线性单位示例
  • 此工具可通过 GPU 加速,也就是说,如果系统中安装了兼容的图形处理器 (GPU),该设备将用于增强工具的性能。 使用用于分析的目标设备(Python 中的 analysis_target_device)参数来控制是使用 GPU 还是 CPU 来运行该工具。

    有关兼容的 GPU 以及配置和使用 GPU 设备的更多详细信息还有故障排除提示,请参阅使用 Spatial Analyst 进行 GPU 处理

参数

标注说明数据类型
输入栅格

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

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

Raster Layer
输入观察点或观察折线要素

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

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

Feature Layer
输出地面以上栅格
(可选)

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

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

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

Raster Dataset
分析类型
(可选)

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

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

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

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

Linear Unit
输出观察点-区域关系表
(可选)

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

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

Table
折射系数
(可选)

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

默认值为 0.13。

Double
表面偏移
(可选)

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

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

例如,如果要观察的对象为车辆,则应在此处指定车辆的高度。

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

默认值为 0。

Linear Unit; Field
观察点高程
(可选)

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

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

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

Linear Unit; Field
观察点偏移
(可选)

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

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

例如,如果观察点从塔上观察,则应在此处指定塔的高度。

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

默认值是 1 米。

Linear Unit; Field
内半径
(可选)

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

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

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

默认值为 0。

Linear Unit; Field
内半径为 3D 距离
(可选)

指定内半径参数的距离类型。

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

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

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

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

Linear Unit; Field
外半径为 3D 距离
(可选)

指定外半径参数的距离类型。

  • 未选中 - 外半径将被视为 2D 距离。 这是默认设置。
  • 选中 - 外半径将被视为 3D 距离。
Boolean
水平起始角
(可选)

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

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

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

Double; Field
水平终止角
(可选)

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

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

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

Double; Field
垂直上角
(可选)

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

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

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

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

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

Double; Field
垂直下角
(可选)

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

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

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

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

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

Double; Field
分析方法
(可选)

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

  • 所有视线视线会运行到栅格上的每个像元以创建可见区域。 这是默认方法。
  • 周长视线视线仅会运行到可见区域周边的像元以创建可见区域。 这种方法的性能比所有视线方法好,因为这种方法的计算中所运行的视线较少。
String
用于分析的目标设备
(可选)

指定将用于执行计算的设备。

  • 先 GPU 后 CPU如果找到了兼容的 GPU,则系统会将其用于执行计算。 否则,系统将使用 CPU。 这是默认设置。
  • 仅 CPU计算将仅在 CPU 上执行。
  • 仅 GPU计算将仅在 GPU 上执行。
String

返回值

标注说明数据类型
输出栅格

输出栅格。

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

Raster

Viewshed2(in_raster, in_observer_features, {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}, {analysis_target_device})
名称说明数据类型
in_raster

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

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

Raster Layer
in_observer_features

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

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

Feature Layer
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
(可选)

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

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

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
analysis_target_device
(可选)

指定将用于执行计算的设备。

  • GPU_THEN_CPU如果找到了兼容的 GPU,则系统会将其用于执行计算。 否则,系统将使用 CPU。 这是默认设置。
  • CPU_ONLY计算将仅在 CPU 上执行。
  • GPU_ONLY计算将仅在 GPU 上执行。
String

返回值

名称说明数据类型
out_raster

输出栅格。

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

Raster

代码示例

Viewshed2 示例 1(Python 窗口)

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

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outViewshed2 = Viewshed2("elevation", "obser1.shp", "", "OBSERVERS", "",
                         "C:/sapyexamples/output/obstable01.dbf",
                         analysis_method="ALL_SIGHTLINES")
outViewshed2.save("C:/sapyexamples/output/outvwshd2_01")
Viewshed2 示例 2(独立脚本)

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

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

# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *

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

# set local variables
inRaster = "elevation"
inObservers = "obser2.shp"
outAGL = ""
analysisType = "OBSERVERS"
verticalError = ""
outAnalysisRelationTable = "C:/sapyexamples/output/obser_region2.dbf"
refractCoeff = ""
surfaceOffset = "offsetb"
observerElevation = "spot"
observerOffset = "offseta"
innerRadius = "radius1"
innerIs3D = "False"
outerRadius = "radius2"
outerIs3D = "True"
horizStartAngle = "azimuth1"
horizEndAngle = "azimuth2"
vertUpperAngle = "vert1"
vertLowerAngle = "vert2"
analysisMethod = "ALL_SIGHTLINES"

# Execute Viewshed2
outViewshed2 = Viewshed2(inRaster, inObservers, outAGL, analysisType,
                         verticalError, outAnalysisRelationTable, refractCoeff,
                         surfaceOffset, observerElevation, observerOffset,
                         innerRadius, innerIs3D, outerRadius, outerIs3D,
                         horizStartAngle, horizEndAngle, vertUpperAngle,
                         vertLowerAngle, analysisMethod)

# Save the output
outViewshed2.save("C:/sapyexamples/output/outvwshd2_02")