需要 Spatial Analyst 许可。
描述
计算每个像元到源的累积距离,允许直线距离、成本距离、真实表面距离以及垂直和水平成本系数。
使用方法
输入源数据可以是要素类或栅格。
当输入源数据是栅格时,源像元集包括具有有效值的源栅格中的所有像元。具有 NoData 值的像元不包括在源集内。值 0 将被视为合法的源。可使用提取工具创建源栅格。
当输入源数据是要素类时,源位置在执行分析之前从内部转换为栅格。栅格的分辨率可以由像元大小环境来控制。默认情况下,如果未在工具中指定任何其他栅格,分辨率将由输入空间参考中输入要素范围的宽度与高度中的较小值除以 250 来确定。
当输入源数据为要素数据时,如果输出像元大小相对于输入中的详细信息较为粗略,则必须注意输出像元大小的处理方式。内部栅格化过程将使用与要素转栅格工具相同的默认像元分配类型方法,即像元中心法。这意味着,不在像元中心的数据将不会包含在中间栅格化源输出中,因此也不会在距离计算中表示出来。例如,如果您的源是一系列相对于输出像元大小偏小的面,如建筑物覆盖区,则可能只有一部分面会落入输出栅格像元的中心,从而导致分析中会缺少其他大部分面。
为避免出现这种情况,在中间步骤,您可以使用要素转栅格工具直接将输入要素栅格化并设置字段参数。然后将生成的输出用作希望使用的特定距离工具的输入。或者,您可以选择一个小的像元大小以从输入要素中捕获适当量的详细信息。
如果以下任意输入上存在 NoData:输入成本栅格、输入表面栅格、输入垂直栅格或输入水平栅格,则将在计算中忽略所有输入中这些位置处的像元。上述任意栅格上的 NoData 在整个计算期间保留,因此,所有输出上都存在 NoData。
如果源位于任意对应的输入栅格中的 NoData 上,则在分析中会将其忽略,因此,不会计算距该源的距离。
如果未指定范围环境设置,则通过以下方式确定处理范围:
如果仅指定了输入栅格或要素源数据和输入障碍栅格或要素数据,则将输入的并集(每侧扩展两个像元宽度)用作处理范围。将输出栅格扩展两行和两列的原因如下:在最佳路径为线和最佳路径为栅格中使用输出,并且生成的路径可以绕障碍移动。要将范围用作隐式障碍,必须在环境设置中显式设置范围。
如果指定了以下任意栅格数据集,即输入表面栅格、输入成本栅格、输入垂直栅格或输入水平栅格,则处理范围为这些栅格的交集。
如果未指定像元大小或捕捉栅格环境设置,并且指定了多个栅格作为输入,像元大小和捕捉栅格根据优先顺序进行设置:输入成本栅格、输入表面栅格、输入垂直栅格、输入水平栅格、输入栅格或要素源数据和输入障碍栅格或要素数据。
垂直系数修饰属性的默认值如下:
Keyword Zero Low High Slope Power Cos Sec factor cut cut power power angle angle ------------------------ ------ ----- ----- ----- ----- ----- ----- Binary 1.0 -30 30 ~ ~ ~ ~ Linear 1.0 -90 90 1/90 ~ ~ ~ Symmetric linear 1.0 -90 90 1/90 ~ ~ ~ Inverse linear 1.0 -45 45 -1/45 ~ ~ ~ Symmetric inverse linear 1.0 -45 45 -1/45 ~ ~ ~ Cos ~ -90 90 ~ 1.0 ~ ~ Sec ~ -90 90 ~ 1.0 ~ ~ Cos_sec ~ -90 90 ~ ~ 1.0 1.0 Sec_cos ~ -90 90 ~ ~ 1.0 1.0
坡向工具的输出可以用作输入水平栅格的输入。
水平系数修饰属性的默认值如下:
Keywords Zero factor Cut angle Slope Side value -------------- ----------- ----------- ----- --------- Binary 1.0 45 ~ ~ Forward 0.5 45 (fixed) ~ 1.0 Linear 0.5 181 1/90 ~ Inverse linear 2.0 180 -1/90 ~
源的特征或与源之间的通信可由特定参数进行控制。
- 初始累积用于在移动开始之前设置初始成本。
- 最大累积用于设置源在到达极限前可累积多少成本。
- 要应用于成本的乘数用于指定出行模式或源的量级。
- 行驶方向可确定移动是否从源开始并移动至非源位置,或从非源位置移动回源。
如果使用字段指定任一源特征参数,则根据给定源数据字段的信息,源特征将应用于各个源。当给定关键字或常量值,将应用于所有源。
如果指定了初始累积,则输出成本距离表面上的源位置将设置为初始累积值;否则,输出成本距离表面上的源位置将设置为零。
该工具支持并行处理。如果您的计算机具有多个处理器或处理器具有多个内核,则会获得更好的性能,特别是处理较大数据集时。使用 Spatial Analyst 进行并行处理帮助主题提供了有关此功能及其配置方法的详细信息。
使用并行处理时,将写入临时数据以管理正在处理的数据区段。默认的临时文件夹位置在您的本地 C: 驱动器上。您可以通过设置名为 TempFolders 的系统环境变量并指定要使用的文件夹路径(例如,E:\RasterCache),来控制此文件夹的位置。如果您具有计算机管理权限,还可以使用注册表项(例如,[HKEY_CURRENT_USER\SOFTWARE\ESRI\ArcGISPro\Raster])。
默认情况下,此工具将使用可用内核数的 50%。如果输入数据大小小于 5,000 * 5,000 个像元,则会使用更少的内核。您可以控制该工具用于并行处理因子环境的内核数。
有关适用于此工具的地理处理环境的详细信息,请参阅分析环境和 Spatial Analyst。
语法
DistanceAccumulation(in_source_data, {in_barrier_data}, {in_surface_raster}, {in_cost_raster}, {in_vertical_raster}, {vertical_factor}, {in_horizontal_raster}, {horizontal_factor}, {out_back_direction_raster}, {out_source_direction_raster}, {out_source_location_raster}, {source_initial_accumulation}, {source_maximum_accumulation}, {source_cost_multiplier}, {source_direction}, {distance_method})
参数 | 说明 | 数据类型 |
in_source_data | 输入源位置。 此为栅格或要素数据集,用于标识计算每个输出像元位置的最小积累成本距离所依据的像元或位置。 对于栅格,输入类型可以为整型或浮点型。 | Raster Layer; Feature Layer |
in_barrier_data (可选) | 定义障碍的数据集。 可通过整型栅格、浮点型栅格或要素图层来定义障碍。 对于栅格障碍,该障碍必须具有有效值(包括零),并且非障碍区域必须为 NoData。 | Raster Layer; Feature Layer |
in_surface_raster (可选) | 定义每个像元位置的高程值的栅格。 这些值用于计算经过两个像元时所涉及的实际表面距离。 | Raster Layer |
in_cost_raster (可选) | 定义以平面测量的经过每个像元所需的阻抗或成本。 每个像元位置上的值表示经过像元时移动每单位距离所需的成本。每个像元位置值乘以像元分辨率,同时也会补偿对角线移动来获取经过像元的总成本。 成本栅格的值可以是整型或浮点型,但不可以为负值或零(不存在负成本或零成本)。 | Raster Layer |
in_vertical_raster (可选) | 定义每个像元位置的 z 值的栅格。 这些 z 值用于计算坡度,而坡度用于标识在不同的像元之间移动时产生的垂直系数。 | Raster Layer |
vertical_factor (可选) | Vertical factor 对象定义垂直成本系数和垂直相对移动角度 (VRMA) 之间的关系。 有若干个带有修饰属性的系数可供选择,用于标识定义的垂直系数图。此外,可使用表格来创建自定义图表。这些图表用于标识在计算移动到相邻像元的总成本时的垂直系数。 在下面的描述中,将使用两个英文首字母缩写词:VF 表示垂直系数,用于定义从一个像元移至下一像元时所遇到的垂直阻力;VRMA 表示垂直相对移动角度,用于定义“起始”像元或处理像元与“终止”像元之间的坡度角度。 对象的形式如下:
以上各种形式对象的定义及参数如下:
垂直参数的修饰属性为:
| Vertical Factor |
in_horizontal_raster (可选) | 定义每个像元的水平方向的栅格。 在栅格上的这些值必须是整数,以北纬 0 度(或朝向屏幕顶部)为起始值,范围为 0 至 360,顺时针增加。平坦区域应赋值为 -1。每个位置上的值与 horizontal_factor 结合使用,用来确定在相邻像元之间移动时产生的水平成本。 | Raster Layer |
horizontal_factor (可选) | Horizontal Factor 对象用于定义水平成本系数与水平相对移动角度之间的关系。 有若干个带有修饰属性的系数可供选择,用于标识定义的水平系数图。此外,可使用表格来创建自定义图表。这些图表用于标识在计算移动到相邻像元的总成本时的水平系数。 在下面的描述中,将使用两个英文首字母缩写词:HF 表示水平系数,用于定义从一个像元移动到下一像元时所遇到的水平阻力;HRMA 表示水平相对移动角度,用于定义像元的水平方向与移动方向之间的角度。 对象的形式如下: 以上各种形式对象的定义及参数如下:
水平关键字的修饰属性为:
| Horizontal Factor |
out_back_direction_raster (可选) | 反向栅格中包含以度为单位的计算方向。该方向可用于识别沿最短路径返回最近源同时避开障碍的下一像元。 值的范围是 0 度到 360 度,并为源像元保留 0 度。正东(右侧)是 90 度,且值以顺时针方向增加(180 是南方、270 是西方、360 是北方)。 输出栅格为浮点类型。 | Raster Dataset |
out_source_direction_raster (可选) | 源方向栅格将最小积累成本源像元的方向标识为方位角(以度为单位)。 值的范围是 0 度到 360 度,并为源像元保留 0 度。正东(右侧)是 90 度,且值以顺时针方向增加(180 是南方、270 是西方、360 是北方)。 输出栅格为浮点类型。 | Raster Dataset |
out_source_location_raster (可选) | 源位置栅格为多波段输出。第一个波段包含行索引,第二个波段包含列索引。这些索引用于标识相距最小积累成本距离的源像元的位置。 | Raster Dataset |
source_initial_accumulation (可选) | 开始进行成本计算的初始累积成本。 适用于与源相关的固定成本规范。成本算法将从通过 source_initial_accumulation 设置的值开始,而非从零成本开始。 值必须大于等于零。默认值为 0。 | Double; Field |
source_maximum_accumulation (可选) | 源的旅行者的最大累积。 每个源的成本计算将在达到指定累积后停止。 值必须大于零。默认累积为到输出栅格边的边。 | Double; Field |
source_cost_multiplier (可选) | 要应用于成本值的乘数。 可将其用于控制源的出行或放大模式。乘数越大,在每个像元间移动的成本将越大。 值必须大于零。默认值为 1。 | Double; Field |
source_direction (可选) | 当应用水平和垂直系数时,指定旅行者的方向。
指定将应用于所有源的 FROM_SOURCE 或 TO_SOURCE 关键字,或指定包含用于确定各个源行驶方向关键字的源数据字段。该字段必须包含字符串 FROM_SOURCE 或 TO_SOURCE。 | String; Field |
distance_method (可选) | 指定是否使用平面(平地)或测地线(椭球)方法计算距离。
| String |
返回值
名称 | 说明 | 数据类型 |
out_distance_accumulation_raster | 输出距离栅格。 输出栅格为浮点型。 | Raster |
代码示例
以下 Python 窗口脚本演示了如何使用 DistanceAccumulation 工具。
import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outDistAcc = DistanceAccumulation("insources.shp", "barriers.tif")
outDistAcc.save("c:/sapyexamples/output/distacc.tif")
为每个像元计算与最近源相距的最小累积成本距离,同时考虑表面距离以及水平和垂直成本因素。
# Name: DistanceAccumulation_Ex_02.py
# Description: Calculates the distance accumulation.
# 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
inSources = "insources.shp"
inBarrier = "barriers.tif"
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute EucDirections
outDistAcc = DistanceAccumulation(inSources, inBarrier)
# Save the output
outDistAcc.save("c:/sapyexamples/output/distacc2.tif")
许可信息
- Basic: 需要 Spatial Analyst
- Standard: 需要 Spatial Analyst
- Advanced: 需要 Spatial Analyst