路径距离分配 (空间分析)

许可等级:BasicStandardAdvanced

摘要

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

了解有关路径距离工具工作原理的详细信息

用法

语法

PathAllocation (in_source_data, {source_field}, {in_cost_raster}, {in_surface_raster}, {in_horizontal_raster}, {horizontal_factor}, {in_vertical_raster}, {vertical_factor}, {maximum_distance}, {in_value_raster}, {out_distance_raster}, {out_backlink_raster})
参数说明数据类型
in_source_data

输入源位置。

此为栅格或要素数据集,用于标识计算每个输出像元位置的最小积累成本距离所依据的像元或位置。

对于栅格,输入类型可以为整型或浮点型。

如果输入源栅格是浮点型,则必须设置整型的 {in_value_raster}。此类赋值栅格优先于 {source_field} 中的任何设置。

Raster Layer | Feature Layer
source_field
(可选)

用于向源位置分配值的字段。该字段必须为整型。

如果已设置 {in_value_raster},则该输入中的值优先于 {source_field} 中的任何设置。

Field
in_cost_raster
(可选)

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

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

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

Raster Layer
in_surface_raster
(可选)

定义每个像元位置的高程值的栅格。

这些值用于计算经过两个像元时所涉及的实际表面距离。

Raster Layer
in_horizontal_raster
(可选)

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

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

Raster Layer
horizontal_factor
(可选)

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

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

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

该对象具有下列形式:

以上各种形式对象的定义及参数是:

  • HfBinary({zero_factor},{cut_angle})

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

  • HfForward({zero_factor},{side_value})

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

  • HfLinear({zero_factor},{cut_angle},{slope})

    指定 HF 是 HRMA 的线性函数。

  • HfInverseLinear({zero_factor},{cut_angle},{slope})

    指定 HF 是 HRMA 的逆线性函数。

  • HfTable(in_table)

    标识将用于定义水平系数图(确定 HF)的表文件。

水平关键字中的修饰属性是:

  • {zero_factor} - 确定当 HRMA 为 0 时所使用的水平系数。该系数可确定任意水平系数函数的 y 截距。
  • {cut_angle} - 定义一个 HRMA 角度,大于该角度时 HF 将被设置为无穷大。
  • {slope} - 确定与 LINEAR 和 INVERSE_LINEAR 水平系数关键字结合使用的直线坡度。坡度被指定为垂直增量与水平增量的比值(例如,45 百分比坡度是 1/45,以 0.02222 的方式输入)。
  • {side_value} - 用于确定指定了 FORWARD 水平系数关键字时,HRMA 大于或等于 45 度且小于 90 度情况下的 HF。
  • in_table - 标识定义 HF 的表名称。

Horizontal factor
in_vertical_raster
(可选)

定义每个像元位置的 z 值的栅格。

这些 z 值用于计算坡度,而坡度用于标识在不同的像元之间移动时产生的垂直系数。

Raster Layer
vertical_factor
(可选)

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

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

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

该对象具有下列形式:

以上各种形式对象的定义及参数是:

  • VfBinary({zero_factor},{low_cut_angle},{high_cut_angle})

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

  • VfLinear({zero_factor},{low_cut_angle},{high_cut_angle},{slope})

    指示 VF 是 VRMA 的线性函数。

  • VfInverseLinear({zero_factor},{low_cut_angle},{high_cut_angle},{slope})

    指示 VF 是 VRMA 的逆线性函数。

  • VfSymLinear({zero_factor},{low_cut_angle},{high_cut_angle},{slope})

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

  • VfSymInverseLinear({zero_factor},{low_cut_angle},{high_cut_angle},{slope})

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

  • VfCos({low_cut_angle},{high_cut_angle},{cos_power})

    将 VF 标识为 VRMA 的余弦函数。

  • VfSec({low_cut_angle},{high_cut_angle},{sec_power})

    将 VF 标识为 VRMA 的正割函数。

  • VfCosSec({low_cut_angle},{high_cut_angle},{cos_power},{sec_power})

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

  • VfSecCos({low_cut_angle},{high_cut_angle},{sec_power},{cos_power})

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

  • VfTable(in_table)

    标识将用于定义垂直系数图(确定 VF)的表文件。

垂直参数的修饰属性是:

  • {zero_factor} - 确定 VRMA 为零时要使用的垂直系数。该系数可确定指定函数的 y 截距。按照定义,零系数对于任意三角垂直函数(Cos、Sec、Cos_Sec 或 Sec_Cos)都不适用。y 截距由以上函数定义。
  • {low_cut_angle} - 定义一个 VRMA 角度,小于该角度时 VF 将被设置为无穷大。
  • {high_cut_angle} - 定义一个 VRMA 角度,大于该角度时 VF 将被设置为无穷大。
  • {slope} - 确定与 VfLinearVfInverseLinear 参数结合使用的直线坡度。坡度被指定为垂直增量与水平增量的比值(例如,45 百分比坡度是 1/45,以 0.02222 的方式输入)。
  • in_table - 标识定义 HF 的表名称。
Vertical factor
maximum_distance
(可选)

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

如果累积的成本距离值超过该值,则像元位置的输出值为 NoData。最大距离定义计算累积成本距离适用的范围。

默认距离是到输出栅格边的距离。

Double
in_value_raster
(可选)

标识应该用于每个输入源位置的区域值的输入整型栅格。

对于每个源位置(像元或要素),由 {in_value_raster} 定义的值将被分配至所有分配到供计算使用的源位置的像元。此类赋值栅格优先于 {source_field} 中的任何设置。

Raster Layer
out_distance_raster
(可选)

输出路径距离栅格。

此输出路径距离栅格标识每个像元到标识的源位置在成本表面上的最低累积成本距离,同时会考虑表面距离以及水平和垂直表面系数。

源可以是一个像元、一组像元或者一个或更多要素位置。

输出栅格为浮点型。

Raster Dataset
out_backlink_raster
(可选)

输出成本回溯链接栅格。

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

如果该路径穿过右侧的相邻像元,则为像元分配值 1、2 来与右下角像元相对应,并按顺时针方向依此类推。值 0 留供源像元使用。

回溯链接位置
Raster Dataset

返回值

名称说明数据类型
out_allocation_raster

输出路径距离分配栅格。

此栅格识别花费最小累积成本可到达的每个源位置(像元或要素)的区域,同时考虑表面距离以及水平和垂直成本因素。

输出栅格为整型。

Raster

代码实例

PathAllocation 示例 1(Python 窗口)

以下 Python 窗口脚本演示了 PathDistanceAllocation 工具的使用方法。

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
pathAlloc = PathAllocation("observers.shp", "costraster", "elevation", "backlink2",
                            HfForward(0.5, 1.0), "focalcost.tif", VfBinary(1.0, -30, 30),  
                            25000, "eucdirout", "FID", "c:/sapyexamples/output/optpathdist", 
                            "c:/sapyexamples/output/optpathbl")
pathAlloc.save("c:/sapyexamples/output/allocpath")
PathAllocation 脚本示例

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

# Name: PathAllocation_Ex_02.py
# Description: Calculates, for each cell, its nearest source based 
#              on the least accumulative cost over a cost surface, 
#              while accounting for surface distance and horizontal 
#              and vertical cost factors. 
# 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
inSource = "observers.shp"
costRast = "costraster"
surfaceRast = "elevation"

# The horizontal factor
inHoriz = "backlink2"
# Create the HfForward Object
zeroFactor = 0.5
sideValue = 1.0
myHorizFactor = HfForward(zeroFactor, sideValue)

#The vertical factor
inVertical = "focalcost.tif"
# Create the VfBinary Object
zeroFactor = 1.0
lowCutAngle = -30
highCutAngle = 30
myVerticalFactor = VfBinary(zeroFactor, lowCutAngle, highCutAngle)

maxDist = 25000
valRaster = "eucdirout"
sourceField = "FID"
optPathDistOut = "c:/sapyexamples/output/optdistpath"
optPathBLOut = "c:/sapyexamples/output/pathblinkout"

# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")

# Execute PathAllocation
pathAlloc = PathAllocation(inSource, costRast, surfaceRast, 
                           inHoriz, myHorizFactor, inVertical, myVerticalFactor, 
                           maxDist, valRaster, sourceField, 
                           optPathDistOut, optPathBLOut)

# Save the output 
pathAlloc.save("c:/sapyexamples/output/allocpath02")

环境

相关主题

许可信息

ArcGIS for Desktop Basic:需要 Spatial Analyst
ArcGIS for Desktop Standard:需要 Spatial Analyst
ArcGIS for Desktop Advanced:需要 Spatial Analyst
9/15/2013