距离分配 (栅格分析)

描述

根据直线距离、成本距离、真实表面距离以及垂直和水平成本系数,计算每个单元到所提供的源的距离分配。

使用方法

  • 此栅格分析门户工具将在您登录到 ArcGIS Enterprise “了解 ArcGIS Enterprise 门户中的分析”链接 时可用,其中门户包含一个 ArcGIS Image Server “什么是 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 用于定义“起始”像元或处理像元与“终止”像元之间的坡度角度。

对象的形式如下: VfBinaryVfLinearVfInverseLinearVfSymLinearVfSymInverseLinearVfCosVfSecVfSecVfCosSecVfSecCos

这些形式的定义及参数如下:

  • VfBinary({zeroFactor}, {lowCutAngle}, {highCutAngle})

    如果 VRMA 大于交角的下限且小于交角的上限,则将 VF 设置为与零系数相关联的值;否则为无穷大。

  • VfLinear({zeroFactor}, {lowCutAngle}, {highCutAngle}, {slope})

    VF 是 VRMA 的线性函数。

  • VfInverseLinear({zeroFactor}, {lowCutAngle}, {highCutAngle}, {slope})

    VF 是 VRMA 的逆线性函数。

  • VfSymLinear({zeroFactor}, {lowCutAngle}, {highCutAngle}, {slope})

    无论在 VRMA 正侧还是负侧,VF 均为 VRMA 的线性函数,并且这两个线性函数关于 VF (y) 轴对称。

  • VfSymInverseLinear({zeroFactor}, {lowCutAngle}, {highCutAngle}, {slope})

    无论在 VRMA 正侧还是负侧,VF 均为 VRMA 的逆线性函数,并且这两个线性函数关于 VF (y) 轴对称。

  • VfCos({lowCutAngle}, {highCutAngle}, {cosPower})

    VF 为 VRMA 的余弦函数。

  • VfSec({lowCutAngle}, {highCutAngle}, {secPower})

    VF 为 VRMA 的正割函数。

  • VfCosSec({lowCutAngle}, {highCutAngle}, {cosPower}, {secPower})

    当 VRMA 为负时,VF 为 VRMA 的余弦函数;当 VRMA 为非负时,VF 为 VRMA 的正割函数。

  • VfSecCos({lowCutAngle}, {highCutAngle}, {secPower}, {cos_power})

    当 VRMA 为负时,VF 为 VRMA 的正割函数;当 VRMA 为非负时,VF 为 VRMA 的余弦函数。

垂直参数的修饰属性如下:

  • zeroFactor - VRMA 为零时要使用的垂直系数。该系数可确定指定函数的 y 截距。按照定义,零系数对于任意三角垂直函数(Cos、Sec、Cos-Sec 或 Sec-Cos)都不适用。y 截距由以上函数定义。
  • lowCutAngle - VRMA 角度,小于该角度时会将 VF 设置为无穷大。
  • highCutAngle - VRMA 角度,大于该角度时会将 VF 设置为无穷大。
  • slope - 与 VfLinearVfInverseLinear 参数相结合使用的直线坡度。坡度被指定为垂直增量与水平增量的比值(例如,45 百分比坡度是 1/45,以 0.02222 的方式输入)。
Vertical Factor
inputHorizontalRaster
(可选)

定义每个像元的水平方向的栅格。

在栅格上的这些值必须是整数,以北纬 0 度(或朝向屏幕顶部)为起始值,范围为 0 至 360,顺时针增加。平坦区域应赋值为 -1。每个位置上的值与 horizontal_factor 参数结合使用,用来确定在相邻像元之间移动时产生的水平成本。

Raster Layer
horizontalFactor
(可选)

Horizontal Factor 对象用于定义水平成本系数与水平相对移动角度之间的关系。

有若干个带有修饰属性的系数可供选择,用于标识定义的水平系数图。这些图表用于标识在计算移动到相邻像元的总成本时的水平系数。

在以下描述中,水平系数 (HF) 用于定义从一个像元移动到下一像元时所遇到的水平阻力;水平相对移动角度 (HRMA) 用于定义像元的水平方向与移动方向之间的角度。

对象的形式如下: HfBinaryHfForwardHfLinearHfInverseLinear

这些形式的定义及参数如下:

  • HfBinary({zeroFactor}, {cutAngle})

    如果 HRMA 小于交角,则将 HF 设置为与零系数相关联的值;否则为无穷大。

  • HfForward({zeroFactor}, {sideValue})

    只允许向前的移动。HRMA 必须大于等于 0 度且小于 90 度 (0 <= HRMA < 90)。如果 HRMA 大于 0 度且小于 45 度,则将像元的 HF 设置为与零系数相关联的值。如果 HRMA 大于等于 45 度,则使用边值修饰属性值。对于 HRMA 等于或大于 90 度的任何情况,均将 HF 设置为无穷大。

  • HfLinear({zeroFactor}, {cutAngle}, {slope})

    HF 是 HRMA 的线性函数。

  • HfInverseLinear({zeroFactor}, {cutAngle}, {slope})

    HF 是 HRMA 的逆线性函数。

水平关键字的修饰属性为:

  • zeroFactor - HRMA 为 0 时的水平系数。该系数可确定任意水平系数函数的 y 截距。
  • cutAngle - HRMA 角度,HRMA 大于该角度时会将 HF 设置为无穷大。
  • slope - 与 HfLinearHfInverseLinear 水平系数关键字相结合使用的直线坡度。坡度被指定为垂直增量与水平增量的比值(例如,45 百分比坡度是 1/45,以 0.02222 的方式输入)。
  • sideValue - 在指定了 HfForward 水平系数关键字的情况下,HRMA 大于或等于 45 度且小于 90 度时的 HF。

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_SOURCETO_SOURCE 关键字,或指定包含用于确定各个源行驶方向关键字的源数据字段。该字段必须包含字符串 FROM_SOURCETO_SOURCE

String; Field
distanceMethod
(可选)

指定是否使用平面(平地)或测地线(椭球)方法计算距离。

  • PLANAR将使用 2D 笛卡尔坐标系对投影平面执行距离计算。这是默认设置。
  • GEODESIC距离计算将在椭圆体上执行。因此,结果不会改变,不考虑输入或输出投影。
String

派生输出

名称说明数据类型
outputDistanceAllocationRaster

输出距离分配栅格。

栅格
outputDistanceAccumulationRaster

输出距离累积栅格。

栅格
outputBackDirectionRaster

输出反向栅格

栅格
outputSourceDirectionRaster

输出源方向栅格。

栅格
outputSourceLocationRaster

输出源位置栅格。

栅格

代码示例

DistanceAllocation 示例 1(Python 窗口)

以下 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')
DistanceAllocation 示例 2(独立脚本)

为每个像元计算与最近源相距的最小累积成本距离,同时考虑表面距离以及水平和垂直成本因素。

# 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

相关主题