描述
考虑表面距离以及水平和垂直成本因素的情况下,计算与最小成本源之间的最小累积成本距离。
插图
使用方法
此栅格分析门户工具将在您登录到 ArcGIS Enterprise 时可用,其中门户包含一个 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 表示水平相对移动角度,用于定义像元的水平方向与移动方向之间的角度。 有多种类型的可用水平系数:
默认值为二进制。 水平关键字的特征:
| Horizontal Factor |
inputVerticalRaster (可选) | 定义每个像元的垂直 (z) 值的栅格。 | Raster Layer; Image Service; String |
verticalFactor (可选) | 垂直系数用于定义垂直成本系数和垂直相对移动角度 (VRMA) 之间的关系。 有若干个带有修饰属性的系数可供选择,用于标识定义的垂直系数图。这些图表用于标识在计算移动到相邻像元的总成本时的垂直系数。 在下面的说明中,将使用两个英文首字母缩写词:VF 表示垂直系数,用于定义从一个像元移至下一像元时所遇到的垂直阻力;VRMA 表示垂直相对移动角度,用于定义“起始”像元或处理像元与“终止”像元之间的坡度角度。 有多种类型的可用垂直系数:
默认值为二进制。 垂直关键字的特征:
| 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_SOURCE 或 TO_SOURCE。 | String |
outputBacklinkName (可选) | 输出回溯链接栅格服务的名称。 回溯链接栅格包含从 0 到 360 的值,这些值用于定义从某像元开始沿最小累积成本路径的方向,以达到最小成本源,同时会考虑表面距离以及水平和垂直表面系数。 | String |
outputAllocationName (可选) | 输出分配栅格服务的名称。 该栅格可识别花费最小累积成本便可到达的每个源位置(像元或要素)的区域。 输出栅格为整型。 | String |
allocationField (可选) | 用于保存定义每个源的值的源输出上的字段。 | String |
派生输出
名称 | 说明 | 数据类型 |
outputDistanceRaster | 输出距离栅格。 | 栅格图层 |
outputBacklinkRaster | 输出回溯链接栅格。 | 栅格图层 |
outputAllocationRaster | 输出分配栅格。 | 栅格图层 |
代码示例
此示例可计算距离单个源的行程成本。
import arcpy
arcpy.CalculateTravelCost_ra('https://MyPortal.esri.com/server/rest/services/Hosted/reccenter/ImageServer',
"outDist", "inCostRas", "inSurfaceRas", "200000")
此示例可计算距离一组源的行程成本。
# 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