描述
根据直线距离、成本距离、真实表面距离以及垂直和水平成本系数,计算每个单元到所提供的源的距离分配。
使用方法
此栅格分析门户工具将在您登录到 ArcGIS Enterprise 时可用,其中门户包含一个 ArcGIS Image Server ,此链接专为 Raster Analysis 配置。调用该工具后,ArcGIS Pro 将充当客户端,处理将在与 ArcGIS Enterprise 联合的服务器中进行。门户工具接受来自门户的图层作为输入,并在门户中创建输出。
输入栅格图层支持来自门户的图层、图像服务的 URI 或 URL 或创建影像服务器图层工具的输出。输入要素图层可以是来自门户、URI 或要素服务 URL 的图层。此工具不支持本地栅格数据或图层。虽然可以使用本地要素数据和图层作为此门户工具的输入,但是最佳做法是使用门户的图层作为输入。
当输入源数据是影像服务时,源像元集包括具有有效值的源栅格中的所有像元。具有 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。
语法
arcpy.ra.DistanceAllocation(inputSourceRasterOrFeatures, outputDistanceAllocationRasterName, {inputBarrierRasterOrFeatures}, {inputSurfaceRaster}, {inputCostRaster}, {inputVerticalRaster}, {verticalFactor}, {inputHorizontalRaster}, {horizontalFactor}, {outputDistanceAccumulationRasterName}, {outputBackDirectionRasterName}, {outputSourceDirectionRasterName}, {outputSourceLocationRasterName}, {sourceField}, {sourceInitialAccumulation}, {sourceMaximumAccumulation}, {sourceCostMultiplier}, {sourceDirection}, {distanceMethod})
参数 | 说明 | 数据类型 |
inputSourceRasterOrFeatures | 输入源位置。 此为图像服务或要素服务,用于标识计算每个输出像元位置的分配所依据的像元或位置。 对于影像服务,输入类型可以为整型或浮点型。 | Raster Layer; Feature Layer |
outputDistanceAllocationRasterName | 输出距离分配栅格服务的名称。 | String |
inputBarrierRasterOrFeatures (可选) | 定义障碍的数据集。 可通过整型或浮点型图像服务或要素服务来定义障碍。 对于图像服务障碍,该障碍必须具有有效值(包括零),并且非障碍区域必须为 NoData。 | Raster Layer; Feature Layer |
inputSurfaceRaster (可选) | 定义每个像元位置的高程值的图像服务。 这些值用于计算经过两个像元时所涉及的实际表面距离。 | Raster Layer |
inputCostRaster (可选) | 定义以平面测量方式经过每个像元的成本或阻抗的栅格。 每个像元位置上的值表示经过像元时移动每单位距离所需的成本。每个像元位置值乘以像元分辨率,同时也会补偿对角线移动来获取经过像元的总成本。 成本栅格的值可以是整型或浮点型,但不可以为负值或零(不存在负成本或零成本)。 | Raster Layer |
inputVerticalRaster (可选) | 定义每个像元位置的 z 值的图像服务。 这些 z 值用于计算坡度,而坡度用于标识在不同的像元之间移动时产生的垂直系数。 | Raster Layer |
verticalFactor (可选) | Vertical factor 对象定义垂直成本系数和垂直相对移动角度 (VRMA) 之间的关系。 有若干个带有修饰属性的系数可供选择,用于标识定义的垂直系数图。这些图表用于标识在计算移动到相邻像元的总成本时的垂直系数。 在以下描述中,垂直系数 (VF) 用于定义从一个像元移至下一像元时所遇到的垂直阻力;VRMA 用于定义“起始”像元或处理像元与“终止”像元之间的坡度角度。 对象的形式如下: VfBinary、VfLinear、VfInverseLinear、VfSymLinear、VfSymInverseLinear、VfCos、VfSec、VfSec、VfCosSec 和 VfSecCos 这些形式的定义及参数如下:
垂直参数的修饰属性如下:
| Vertical Factor |
inputHorizontalRaster (可选) | 定义每个像元的水平方向的栅格。 在栅格上的这些值必须是整数,以北纬 0 度(或朝向屏幕顶部)为起始值,范围为 0 至 360,顺时针增加。平坦区域应赋值为 -1。每个位置上的值与 horizontal_factor 参数结合使用,用来确定在相邻像元之间移动时产生的水平成本。 | Raster Layer |
horizontalFactor (可选) | Horizontal Factor 对象用于定义水平成本系数与水平相对移动角度之间的关系。 有若干个带有修饰属性的系数可供选择,用于标识定义的水平系数图。这些图表用于标识在计算移动到相邻像元的总成本时的水平系数。 在以下描述中,水平系数 (HF) 用于定义从一个像元移动到下一像元时所遇到的水平阻力;水平相对移动角度 (HRMA) 用于定义像元的水平方向与移动方向之间的角度。 对象的形式如下: HfBinary、HfForward、HfLinear 和 HfInverseLinear 这些形式的定义及参数如下:
水平关键字的修饰属性为:
| Horizontal Factor |
outputDistanceAccumulationRasterName (可选) | 输出距离累积栅格名称。 距离累积栅格包含每个像元距最小成本源的累积距离。 | String |
outputBackDirectionRasterName (可选) | 输出反向栅格名称。 反向栅格包含以度为单位的计算方向。该方向用于标识沿最佳路径返回最小累积成本源同时避开障碍的下一个像元。 值范围为 0 度到 360 度。值 0 将会留供源像元使用。正东(右侧)是 90 度,且值以顺时针方向增加(180 是南方、270 是西方、360 是北方)。 输出栅格为浮点类型。 | String |
outputSourceDirectionRasterName (可选) | 输出源方向栅格名称。 源方向栅格将最小积累成本源像元的方向标识为方位角(以度为单位)。 值范围为 0 度到 360 度。值 0 将会留供源像元使用。正东(右侧)是 90 度,且值以顺时针方向增加(180 是南方、270 是西方、360 是北方)。 输出栅格为浮点类型。 | String |
outputSourceLocationRasterName (可选) | 输出源位置栅格名称。 源位置栅格为多波段输出。第一个波段包含行索引,第二个波段包含列索引。这些索引用于标识相距最小积累成本距离的源像元的位置。 | String |
sourceField (可选) | 用于向源位置分配值的字段。其类型必须为整型。 | Field |
sourceInitialAccumulation (可选) | 开始进行成本计算的初始累积成本。 适用于与源相关的固定成本规范。成本算法将从通过 source_initial_accumulation 设置的值开始,而非从零成本开始。 值必须大于等于零。默认值为 0。 | Double; Field |
sourceMaximumAccumulation (可选) | 源的旅行者的最大累积。 每个源的成本计算将在达到指定累积后停止。 值必须大于零。默认累积为到输出栅格边的边。 | Double; Field |
sourceCostMultiplier (可选) | 要应用于成本值的乘数。 可将其用于控制源的出行或放大模式。乘数越大,在每个像元间移动的成本将越大。 值必须大于零。默认值为 1。 | Double; Field |
sourceDirection (可选) | 当应用水平和垂直系数时,指定旅行者的方向。
指定将应用于所有源的 FROM_SOURCE 或 TO_SOURCE 关键字,或指定包含用于确定各个源行驶方向关键字的源数据字段。该字段必须包含字符串 FROM_SOURCE 或 TO_SOURCE。 | String; Field |
distanceMethod (可选) | 指定是否使用平面(平地)或测地线(椭球)方法计算距离。
| String |
派生输出
名称 | 说明 | 数据类型 |
outputDistanceAllocationRaster | 输出距离分配栅格。 | 栅格 |
outputDistanceAccumulationRaster | 输出距离累积栅格。 | 栅格 |
outputBackDirectionRaster | 输出反向栅格 | 栅格 |
outputSourceDirectionRaster | 输出源方向栅格。 | 栅格 |
outputSourceLocationRaster | 输出源位置栅格。 | 栅格 |
代码示例
以下 Python 窗口脚本演示了如何使用 DistanceAllocation 工具。
import arcpy
arcpy.DistanceAllocation_ra('https://MyPortal.esri.com/server/rest/services/Hosted/sources/ImageServer',
'outDistanceAllocation',
'https://MyPortal.esri.com/server/rest/services/Hosted/barrier/ImageServer',
'https://MyPortal.esri.com/server/rest/services/Hosted/surface/ImageServer',
'https://MyPortal.esri.com/server/rest/services/Hosted/cost/ImageServer')
为每个像元计算与最近源相距的最小累积成本距离,同时考虑表面距离以及水平和垂直成本因素。
# Name: DistanceAllocation_Ex_02.py
# Description: Calculates the distance allocation.
# Requirements: ArcGIS Image Server
# Import system modules
import arcpy
# Set local variables
inputSourceRasterOrFeatures = 'https://MyPortal.esri.com/server/rest/services/Hosted/sources/ImageServer'
outputDistanceAllocationRasterName = "outDistAllo"
inputBarrierRasterOrFeatures = 'https://MyPortal.esri.com/server/rest/services/Hosted/barrier/ImageServer'
inputSurfaceRaster = 'https://MyPortal.esri.com/server/rest/services/Hosted/surface/ImageServer'
inputCostRaster = 'https://MyPortal.esri.com/server/rest/services/Hosted/cost/ImageServer'
inputVerticalRaster = 'https://MyPortal.esri.com/server/rest/services/vertical/sources/ImageServer'
verticalFactor = ""
inputHorizontalRaster = 'https://MyPortal.esri.com/server/rest/services/Hosted/horizontal/ImageServer'
horizontalFactor = ""
outputDistanceAccumulationRasterName = "outAccum"
outputBackDirectionRasterName = "outBackDir"
outputSourceDirectionRasterName = "outSourceDir"
outputSourceLocationRasterName = "outSourceLocation"
sourceField = "SourceID"
sourceInitialAccumulation = "IntitalAccum"
sourceMaximumAccumulation = "500000"
sourceCostMultiplier = "CostMultiplier"
sourceDirection = "FROM_SOURCE"
distanceMethod = "PLANAR"
# Execute
arcpy.DistanceAllocation_ra(inputSourceRasterOrFeatures, outputDistanceAllocationRasterName,
inputBarrierRasterOrFeatures, inputSurfaceRaster,
inputCostRaster, inputVerticalRaster, verticalFactor,
inputHorizontalRaster, horizontalFactor,
outputDistanceAccumulationRasterName, outputBackDirectionRasterName,
outputSourceDirectionRasterName, outputSourceLocationRasterName,
sourceField, sourceInitialAccumulation, sourceMaximumAccumulation,
sourceCostMultiplier, sourceDirection, distanceMethod)
许可信息
- Basic: 需要 ArcGIS Image Server
- Standard: 需要 ArcGIS Image Server
- Advanced: 需要 ArcGIS Image Server