需要 Spatial Analyst 许可。
摘要
使用测地线方法,确定对一组观察点要素可见的栅格表面位置。
插图
用法
此工具可执行两种类型的可见性分析,由分析类型参数控制。针对第一种类型 FREQUENCY,该工具可确定对一组观察点可见的栅格表面位置。对于另一种类型 OBSERVERS,可识别从各栅格表面位置进行观察时可见的观察点。
此工具可通过 GPU 加速,也就是说,如果系统中安装了 GPU 设备(图形处理器),该设备将用于增强工具的性能。
目前,此工具仅支持具有 CUDA 计算能力 2.0 或 OpenCL 1.2 的 NVIDIA 显卡,并且要求系统已经安装有合适的显卡。要确保正确执行工具,请参阅 NVIDIA 驱动程序更新页面 了解最新的可用驱动程序。
如果 Windows TdrDelay(超时检测和恢复延迟)注册表项的值对操作来说过小,则系统可能会返回 GPU 错误并且工具无法执行。TdrDelay 的默认值为 2 秒。但您需要将其调整为较大的值,如 60 秒。在大部分 Windows 系统中,到注册表中 TdrDelay 项的路径为 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers。如果 TdrDelay 项不存在,则必须在此路径中创建该项并为其分配较大值。必须重新启动计算机才能使更改生效。有关如何定义 TdrDelay 注册表项的更多详细信息,请访问 Microsoft TDR 注册表项网页 。
与其他类似工具不同的是,视域 2 没有 Z 因子参数。要确保输出可见性栅格的正确性,请为输入栅格分配椭圆体垂直坐标系(如果栅格没有此坐标系)。
每个像元中心的可见性都将通过目标和每个观察点之间的视线测试来确定。如果观察点能够看到像元中心的目标,则将该像元视为可见。在确定可见性时,此工具始终会考虑地球的曲率。
在输出可见性栅格上,将为不可见像元分配 NoData。
对于 OBSERVERS 分析类型,允许的最大输入观察点数量为 32。
如果输入栅格含有因采样错误导致的不希望出现的噪点,则在运行此工具之前,可使用低通滤波器(如焦点统计的“平均值”选项)对栅格进行平滑处理。
若要对输入栅格进行重采样,需使用双线性技术。例如,当输出栅格与输入栅格的坐标系统、范围或像元大小不同时,可对输入栅格进行重采样。
默认状态下,将按照输入数据集的最大范围计算视域。为提升性能,建议将外半径参数明确设置为您分析所感兴趣的最大距离。该参数允许工具对仅距观察点一定距离内的像元进行计算。
您可使用分析方法参数来控制结果的质量和获取结果的时间。可将 PERIMETER_SIGHTLINES 方法用于探索性分析,因为它可以在损失输出质量的情况下获得更快的性能。为得到最准确的输出,请使用 ALL_SIGHTLINES 方法。
有关实施此工具的技术方面的详细信息,请参阅以下资源。
http://support.esri.com/en/knowledgebase/techarticles/detail/42804
有关适用于此工具的地理处理环境的详细信息,请参阅分析环境和 Spatial Analyst。
语法
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})
参数 | 说明 | 数据类型 |
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 |
analysis_type (可选) | 选择要执行的可见性分析类型,是确定每个像元对观察点的可见性,还是识别各表面位置上可见的观察点。
| String |
vertical_error (可选) | 表面高程值中不确定项(均方根错误,或称 RMSE)的数量。它是表示输入高程值预计错误的浮点值。为此参数分配的值大于 0 时,输出可见性栅格将为浮点型。此时,输出可见性栅格上的每个像元值将表示该像元对所有观察点可见的可能性总和。 当分析类型为 OBSERVERS或分析方法为 PERIMETER_SIGHTLINES时,此参数将处于禁用状态。 | Linear unit |
out_observer_region_relationship_table (可选) | 用于识别对于每个观察点都可见的区域的输出表。此表可关联到输入观察点要素类以及输出可见性栅格(用于识别对给定观察点可见的区域)。 只有在分析类型为 OBSERVERS 时,才会创建此输出。 | Table |
refractivity_coefficient (可选) | 空气中可见光的折射系数。 默认值为 0.13。 | Double |
surface_offset (可选) | 该值将以表面单位指示要添加到各目标像元 z 值的垂直距离,因为分析可见性时需要考虑该距离。它应为正整数值或浮点值。 它可为输入观察点要素数据集中的字段或数值。如果为此参数设置了一个值,该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。 | Linear unit | Field |
observer_elevation (可选) | 此值用于定义观察点或折点的表面高程。 它可为输入观察点要素数据集中的字段或数值。如果未指定此参数,则会使用双线性插值法从表面栅格中获取观察点高程。如果为此参数设置了一个值,该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。 | Linear unit | Field |
observer_offset (可选) | 该值将以表面单位指示要添加到观察点高程的垂直距离。它应为正整数值或浮点值。 它可为输入观察点要素数据集中的字段或数值。如果为此参数设置了一个值,该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。 | Linear unit | Field |
inner_radius (可选) | 此值用于定义确定可见性的起始(最小)距离。小于此距离的像元在输出中视为不可见,但仍会妨碍内半径和外半径之间像元的可见性。默认值为 0。 它可为输入观察点要素数据集中的字段或数值。如果为此参数设置了一个值,该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。 | Linear unit | Field |
inner_radius_is_3d (可选) | 内半径参数的距离类型。
| Boolean |
outer_radius (可选) | 此值用于定义确定可见性的最大距离。超出此距离的像元将从分析中排除。 它可为输入观察点要素数据集中的字段或数值。如果为此参数设置了一个值,该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。 | Linear unit | Field |
outer_radius_is_3d (可选) | 外半径参数的距离类型。
| Boolean |
horizontal_start_angle (可选) | 该值定义水平扫描范围的起始角度。此值以度为单位,介于 0 至 360.0 度之间,其中 0 指向北。默认值为 0。 它可为输入观察点要素数据集中的字段或数值。如果为此参数设置了一个值,该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。 | Constant | Field |
horizontal_end_angle (可选) | 该值定义水平扫描范围的终止角度。此值以度为单位,介于 0 至 360.0 度之间,其中 0 指向北。默认值为 360.0。 它可为输入观察点要素数据集中的字段或数值。如果为此参数设置了一个值,该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。 | Constant | Field |
vertical_upper_angle (可选) | 该值定义扫描的(位于水平面上)垂直角上限。该值应以度为单位,介于 0 到 90.0 之间,可为整数或浮点。默认值为 90.0。 它可为输入观察点要素数据集中的字段或数值。如果为此参数设置了一个值,该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。 | Constant | Field |
vertical_lower_angle (可选) | 该值定义扫描的(位于水平面下)垂直角下限。该值应以度为单位,介于 -90.0 到 0 之间,其可以是整数,也可以是浮点数。默认值为 -90.0。 它可为输入观察点要素数据集中的字段或数值。如果为此参数设置了一个值,该值将应用到所有观察点。要为每个观察点指定不同的值,请将此参数设置为输入观察点要素数据集中的某个字段。 | Constant | Field |
analysis_method (可选) | 选择用于计算可见性的方法。此选项允许您牺牲一些精度以获得更好的性能。
| 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"
# Check out the ArcGIS Spatial Analyst extension license
arcpy.checkOutExtension("Spatial")
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")
环境
许可信息
- ArcGIS Desktop Basic: 需要 Spatial Analyst 或 3D Analyst
- ArcGIS Desktop Standard: 需要 Spatial Analyst 或 3D Analyst
- ArcGIS Desktop Advanced: 需要 Spatial Analyst 或 3D Analyst