计算行程成本 (栅格分析)

描述

考虑表面距离以及水平和垂直成本因素的情况下,计算与最小成本源之间的最小累积成本距离。

插图

计算行程成本工具图示

使用方法

  • 此栅格分析门户工具将在您登录到 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。

  • 对于输出距离影像服务,距离至一组源位置的像元的最小成本距离(或最小累积成本距离)是从该像元至全部源位置的最小成本距离范围的下限。

  • 成本栅格不能包含零值,因为该算法是乘法过程。如果成本栅格中的确包含表示成本最低区域的零值,则请在运行计算行程成本前,将零值更改为较小的正值(如 0.01)。如果零值表示的是应从分析中排除的区域,那么应在运行计算行程成本之前,将这些值更改为 NoData。

  • 水平系数修饰属性的默认值如下:

    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   ~
  • 垂直系数修饰属性的默认值如下:

    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
  • 源的特征或与源之间的通信可由特定参数进行控制。源成本倍数参数可确定行程模式或源的量级,源开始成本设置移动开始前的开始成本,源阻力比率是一种关于累计成本影响的动态调整,例如,模拟徒步者会有多么疲劳,源容量设置源在到达极限前可同化多少成本。行驶方向可确定移动是否从源开始并移动至非源位置,或从非源位置移动回源。

  • 如果指定了源开始成本,并且行程方向行驶自源,则输出成本距离表面上的源位置将被设置为源开始成本的值;否则,输出成本距离表面上的源位置将被设置为零。

  • 如果使用字段指定任一源特征参数,则根据给定源数据字段的信息,源特征将应用于各个源。当给定关键字或常量值,将应用于所有源。

语法

arcpy.ra.CalculateTravelCost(inputSourceRasterOrFeatures, outputDistanceName, {inputCostRaster}, {inputSurfaceRaster}, {maximumDistance}, {inputHorizontalRaster}, {horizontalFactor}, {inputVerticalRaster}, {verticalFactor}, {sourceCostMultiplier}, {sourceStartCost}, {sourceResistanceRate}, {sourceCapacity}, {sourceTravelDirection}, {outputBacklinkName}, {outputAllocationName}, {allocationField})
参数说明数据类型
inputSourceRasterOrFeatures

此图层用于定义计算距离的源。图层可以是栅格或要素。

Raster Layer; Image Service; Feature Layer; String
outputDistanceName

输出距离栅格服务的名称。

此成本距离影像服务用于标识每个像元到标识的源位置在成本表面上的最小累积成本距离。

String
inputCostRaster
(可选)

定义以平面测量的经过每个像元所需的阻抗或成本。

每个像元位置上的值表示经过像元时移动每单位距离所需的成本。每个像元位置值乘以像元分辨率,同时也会补偿对角线移动来获取经过像元的总成本。

成本栅格的值可以是整型或浮点型,但不可以为负值或零(不存在负成本或零成本)。

Raster Layer; Image Service; String
inputSurfaceRaster
(可选)

定义每个像元位置的高程值的栅格。这些值用于计算经过两个像元时所涉及的实际表面距离。

Raster Layer; Image Service; String
maximumDistance
(可选)

定义累积成本值不能超过的阈值。

Double
inputHorizontalRaster
(可选)

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

在栅格上的这些值必须是整数,以北纬 0 度(或朝向屏幕顶部)为起始值,范围为 0 至 360,顺时针增加。平坦区域应赋值为 -1。

每个位置上的值与 {horizontal_factor} 结合使用,用来确定在相邻像元之间移动时产生的水平成本。

Raster Layer; Image Service; String
horizontalFactor
(可选)

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

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

在下面的说明中,将使用两个英文首字母缩写词:HF 表示水平系数,用于定义从一个像元移动到下一像元时所遇到的水平阻力;HRMA 表示水平相对移动角度,用于定义像元的水平方向与移动方向之间的角度。

有多种类型的可用水平系数:

  • 二进制 - 指示如果 HRMA 小于交角,则将 HF 设置为与零系数相关联的值;否则为无穷大。
  • 前向 - 只允许建立向前的移动。HRMA 必须大于等于 0 度且小于 90 度 (0 <= HRMA < 90)。如果 HRMA 大于 0 度且小于 45 度,则将像元的 HF 设置为与零系数相关联的值。如果 HRMA 大于等于 45 度,则使用边值修饰属性值。对于 HRMA 等于或大于 90 度的任何情况,均将 HF 设置为无穷大。
  • 线性 - 指定 HF 是 HRMA 的线性函数。
  • 逆线性 - 指定 HF 是 HRMA 的逆线性函数。

默认值为二进制。

水平关键字的特征:

  • 零系数 - 确定 HRMA 为零时要使用的水平系数。该系数可确定任意水平系数函数的 y 截距。
  • 交角 - 定义一个 HRMA 角度,大于该角度时 HF 将被设置为无穷大。
  • 坡度 - 与线性逆线性水平系数关键字相结合使用,确定直线坡度。坡度被指定为垂直增量与水平增量的比值(例如,45 百分比坡度是 1/45,以 0.02222 的方式输入)。
  • 边值 - 在指定了前向水平系数关键字的情况下,确定 HRMA 大于或等于 45 度且小于 90 度时的 HF。
Horizontal Factor
inputVerticalRaster
(可选)

定义每个像元的垂直 (z) 值的栅格。

Raster Layer; Image Service; String
verticalFactor
(可选)

垂直系数用于定义垂直成本系数和垂直相对移动角度 (VRMA) 之间的关系。

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

在下面的说明中,将使用两个英文首字母缩写词:VF 表示垂直系数,用于定义从一个像元移至下一像元时所遇到的垂直阻力;VRMA 表示垂直相对移动角度,用于定义“起始”像元或处理像元与“终止”像元之间的坡度角度。

有多种类型的可用垂直系数:

  • 二进制 - 指定如果 VRMA 大于交角的下限且小于交角的上限,则将 VF 设置为与零系数相关联的值;否则为无穷大。
  • 线性 - 指示 VF 是 VRMA 的线性函数。
  • 对称线性 - 指定无论在 VRMA 正侧还是负侧,VF 均为 VRMA 的线性函数,并且这两个线性函数关于 VF (y) 轴对称。
  • 逆线性 - 指示 VF 是 VRMA 的逆线性函数。
  • 对称逆线性 - 指定无论在 VRMA 正侧还是负侧,VF 均为 VRMA 的逆线性函数,并且这两个线性函数关于 VF (y) 轴对称。
  • Cos - 将 VF 标识为 VRMA 的余弦函数。
  • Sec - 将 VF 标识为 VRMA 的正割函数。
  • Cos-Sec - 指定当 VRMA 为负时,VF 为 VRMA 的余弦函数;当 VRMA 为非负时,VF 为 VRMA 的正割函数。
  • Sec-Cos - 指定当 VRMA 为负时,VF 为 VRMA 的正割函数;当 VRMA 为非负时,VF 为 VRMA 的余弦函数。

默认值为二进制。

垂直关键字的特征:

  • 零系数 - 确定 VRMA 为零时要使用的垂直系数。该系数可确定指定函数的 y 截距。按照定义,零系数对于任意三角垂直函数(COS、SEC、COS-SEC 或 SEC-COS)都不适用。y 截距由以上函数定义。
  • 交角下限 - 定义一个 VRMA 角度,小于该角度时 VF 将被设置为无穷大。
  • 交角上限 - 定义一个 VRMA 角度,大于该角度时 VF 将被设置为无穷大。
  • 坡度 - 与线性逆线性垂直系数关键字相结合使用,确定直线坡度。坡度被指定为垂直增量与水平增量的比值(例如,45 百分比坡度是 1/45,以 0.02222 的方式输入)。
Vertical Factor
sourceCostMultiplier
(可选)

要应用于成本值的乘数。

用于控制源的出行或放大模式。乘数越大,在每个像元间移动的成本将越大。

值必须大于零。默认值为 1。

Double; Field
sourceStartCost
(可选)

开始计算成本时的起始成本。

适用于与源相关的固定成本规范。成本算法将从通过 sourceStartCost 设置的值开始,而非从零成本开始。

值必须大于等于零。默认值为 0。

Double; Field
sourceResistanceRate
(可选)

此参数将模拟累积成本增加时所耗费成本的增加情况。用于为行驶者的疲劳程度建模。利用到达某个像元的累积成本的增长量乘以阻力比率,再加上移动至下一个像元的成本。

这是修改后版本的用于计算移动经过像元的显性成本混合利率公式。随着阻力比率的值增加,之后访问的像元成本也随之增加。阻力比率越大,到达下一个像元需要加的附加成本也越多,将针对每个后续移动进行复合。由于阻力比率与复利率相似且累积成本值通常会很大,因此建议采用较小的阻力比率,如 0.02、0.005 或更小,具体取决于累积成本值。

值必须大于等于零。默认值为 0。

Double; Field
sourceCapacity
(可选)

定义源的行驶者的成本容量。

每个源的成本计算将在达到指定容量后停止。

值必须大于零。默认容量是到输出栅格边的容量。

Double; Field
sourceTravelDirection
(可选)

应用水平和垂直系数、源阻力比率和源开始成本时定义行驶者的方向。

  • FROM_SOURCE水平系数、垂直系数、源阻力比率和源开始成本将应用于开始于输入源并移动至非源像元的情况。这是默认设置。
  • TO_SOURCE水平系数、垂直系数、源阻力比率和源开始成本将应用于开始于每个非源像元并移动回输入源的情况。

指定将应用于所有源的 FROM_SOURCETO_SOURCE 关键字,或指定包含用于确定各个源行驶方向关键字的源数据字段。该字段必须包含字符串 FROM_SOURCE 或 TO_SOURCE。

String
outputBacklinkName
(可选)

输出回溯链接栅格服务的名称。

回溯链接栅格包含从 0 到 360 的值,这些值用于定义从某像元开始沿最小累积成本路径的方向,以达到最小成本源,同时会考虑表面距离以及水平和垂直表面系数。

String
outputAllocationName
(可选)

输出分配栅格服务的名称。

该栅格可识别花费最小累积成本便可到达的每个源位置(像元或要素)的区域。

输出栅格为整型。

String
allocationField
(可选)

用于保存定义每个源的值的源输出上的字段。

String

派生输出

名称说明数据类型
outputDistanceRaster

输出距离栅格。

栅格图层
outputBacklinkRaster

输出回溯链接栅格。

栅格图层
outputAllocationRaster

输出分配栅格。

栅格图层

代码示例

CalculateTravelCost 示例 1(Python 窗口)

此示例可计算距离单个源的行程成本。

import arcpy
arcpy.CalculateTravelCost_ra('https://MyPortal.esri.com/server/rest/services/Hosted/reccenter/ImageServer',
                             "outDist", "inCostRas", "inSurfaceRas", "200000")
CalculateTravelCost 示例 2(独立脚本)

此示例可计算距离一组源的行程成本。

# Name: CalculateTravelCost_Ex_02.py
# Description: Calculates for each cell the least accumulative cost distance
#    to the nearest source over a cost  surface. 
# Requirements: ArcGIS Image Server

# Import system modules
import arcpy

# Set local variables
inSource = 'https://MyPortal.esri.com/server/rest/services/Hosted/landuse/ImageServer'
outDistName = 
inCostRast = "costraster"
inElev = "elevation"
maxDist = "50000"

inHoriz = "backlink2"
horizFactor = "FORWARD 0.5 1.0"
inVertical = "focalcost.tif"
verticalFactor = "Binary 1.0 -30 30"

sourceCostMultiplier =
sourceStartCost =
sourceResistanceRate =
sourceCapacity = 
sourceTravelDirection =

optBacklinkName = "c:/sapyexamples/output/pathbacklink"
optAlloName =
allocField = 

# Execute CalculateTravelCost
arcpy.CalculateTravelCost_ra(inSource, outDistName, inCostRast, inElev, maxDist, inHoriz, horizFactor,
                           inVertical, verticalFactor, sourceCostMultiplier, sourceStartCost,
                           sourceResistanceRate, sourceCapacity, sourceTravelDirection, optBacklinkName,
                           optAlloName, allocField)

# Execute CostDistance
outTravelCost = CalculateTravelCost(inSourceData, inCostRaster, maxDistance, outBkLinkRaster)

许可信息

  • Basic: 需要 ArcGIS Image Server
  • Standard: 需要 ArcGIS Image Server
  • Advanced: 需要 ArcGIS Image Server

相关主题