路径距离 (空间分析)
用法
“路径距离”工具与“成本距离”工具相比较而言,两者都可以确定从某个源到栅格表面上各位置的最小累积行程成本。然而,通过考虑实际表面距离及其他水平和垂直因素,“路径距离”工具可将更多的复杂因素添加到此分析。
输入源数据可以是要素类或栅格。
当输入源数据是栅格时,源像元集包括具有有效值的源栅格中的所有像元。具有 NoData 值的像元不包括在源集内。值 0 将被视为合法的源。使用提取工具可轻松地创建源栅格。
-
当输入源数据是要素类时,源位置在执行分析之前从内部转换为栅格。栅格的分辨率可以由像元大小环境来控制。默认情况下,分辨率将由成本、表面、水平系数和垂直系数输入栅格中的像元大小的最大值决定。如均未指定上述可选输入,必须为像元大小环境设置特定像元大小。
当输入源数据为面要素数据时,如果输出像元大小相对于输入中的详细信息较为粗略,则必须注意输出像元大小的处理方式。内部栅格化过程将采用与面转栅格工具相同的默认像元分配类型方法,即 CELL_CENTER。这意味着,不在像元中心的数据将不会包含在中间栅格化源输出中,因此也不会在距离计算中表示出来。例如,如果您的源是一系列相对于输出像元大小偏小的面,如建筑物覆盖区,则可能只有一部分面会落入输出栅格像元的中心,从而导致分析中会缺少其他大部分面。
为避免出现这种情况,在中间步骤,您可以使用面转栅格工具直接将输入要素栅格化并设置优先级字段,将生成的输出用作距离工具的输入。或者,您可以选择一个足够小的像元大小以从输入要素中捕获适当量的详细信息。
包含 NoData 的像元在“路径距离”工具中充当障碍。NoData 值后面的像元成本距离通过围绕 NoData 障碍移动所需的累积成本进行计算。在任意输入栅格上被分配 NoData 的任何像元位置都会在所有输出栅格上接收到 NoData。
如果输入源数据与成本栅格数据的范围不同,则默认的输出范围是两者的交集。要获取全部范围的成本距离面,请在输出范围环境设置中选择输入的并集选项。
如果已在环境中设置了掩膜,则所有的掩膜像元会被视为 NoData 值。
如果已经在栅格分析窗口中定义掩膜,且要被掩膜的像元将掩膜源,则计算将对其余的源像元产生作用。在计算中不考虑被掩膜的源像元。会在所有输出栅格(距离、分配和回溯链接)数据上为这些像元位置分配 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 factor Low cut Height cut Slope Power Cos Sec angle angle power power ------------------------ ----------- ------- ---------- ----- ----- ----- ----- 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
语法
参数 | 说明 | 数据类型 | |
in_source_data |
输入源位置。 此为栅格或要素数据集,用于标识计算每个输出像元位置的最小积累成本距离所依据的像元或位置。 对于栅格,输入类型可以为整型或浮点型。 | Raster Layer | Feature Layer | |
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”表示水平相对移动角度,用于定义像元的水平方向与移动方向之间的角度。 对象具有下列形式: 这些对象的定义及参数为:
水平关键字的修饰属性为:
| Horizontal factor | |
in_vertical_raster (可选) |
定义每个像元位置的 z 值的栅格。 这些 z 值用于计算坡度,而坡度用于标识在不同的像元之间移动时产生的垂直系数。 | Raster Layer | |
vertical_factor (可选) |
垂直系数对象用于定义垂直成本系数和垂直相对移动角度 (VRMA) 之间的关系。 有若干个带有修饰属性的系数可供选择,用于标识定义的垂直系数图。此外,可使用表格来创建自定义图表。这些图表用于标识在计算移动到相邻像元的总成本时的垂直系数。 在下面的说明中,将使用两个英文首字母缩写:“VF”表示垂直系数,用于定义从一个像元移至下一像元时所遇到的垂直阻力;“VRMA”表示垂直相对移动角度,用于定义“起始”像元或处理像元与“终止”像元之间的坡度角度。 该对象具有下列形式:
以上各种形式对象的定义及参数是:
垂直参数的修饰属性是:
| Vertical factor | |
maximum_distance (可选) | 定义累积成本值不能超过的阈值。 如果累积的成本距离值超过该值,则像元位置的输出值为 NoData。最大距离定义计算累积成本距离适用的范围。 默认距离是到输出栅格边的距离。 | Double | |
out_backlink_raster (可选) |
输出成本回溯链接栅格。 回溯链接栅格包含从 0 到 8 的值,这些值用于定义方向或从某像元开始沿最小累积成本路径标识下一个邻近像元(接续像元),以达到最小成本源,同时会考虑表面距离以及水平和垂直表面系数。 如果该路径穿过右侧的相邻像元,则为像元分配值 1、2 来与右下角像元相对应,并按顺时针方向依此类推。值 0 留供源像元使用。 | Raster Dataset |
返回值
名称 | 说明 | 数据类型 |
out_distance_raster |
输出路径距离栅格。 此输出路径距离栅格标识每个像元到标识的源位置在成本表面上的最低累积成本距离,同时会考虑表面距离以及水平和垂直表面系数。 源可以是一个像元、一组像元或者一个或多个要素位置。 输出栅格为浮点型。 | Raster |
代码实例
以下 Python 窗口脚本演示了 PathDistance 工具的使用方法。
import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outPathDist = PathDistance("observers.shp", "costraster", "elevation", "backlink2",
HfForward(0.5, 1.0), "focalcost.tif", VfBinary(1.0, -30, 30),
50000, "c:/sapyexamples/output/backlinkpath")
outPathDist.save("c:/sapyexamples/output/pathdistout")
考虑表面距离以及水平和垂直成本因素的情况下,为每个像元计算与最近源之间的最小累积成本距离。
# Name: PathDistance_Ex_02.py
# Description: Calculates, for each cell, the least accumulative
# cost distance to the nearest source, 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"
inCostRast = "costraster"
inElev = "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 = 50000
optBacklinkOut = "c:/sapyexamples/output/pathbacklink"
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute PathDistance
outPathDist = PathDistance(inSource, inCostRast, inElev, inHoriz,
myHorizFactor, inVertical, myVerticalFactor,
maxDist, optBacklinkOut)
# Save the output
outPathDist.save("c:/sapyexamples/output/pathdistout02")