需要 Spatial Analyst 许可。
摘要
计算每个像元从成本面或到成本面上最小成本源的最小累积成本距离。
插图
用法
输入源数据可以是要素类或栅格。
当输入源数据是栅格时,源像元集包括具有有效值的源栅格中的所有像元。具有 NoData 值的像元不包括在源集内。值 0 将被视为合法的源。使用提取工具可轻松地创建源栅格。
当输入源数据是要素类时,源位置在执行分析之前从内部转换为栅格。栅格的分辨率可以由像元大小环境来控制。默认情况下,分辨率将会设置为输入成本栅格的分辨率。
当输入源数据为面要素数据时,如果输出像元大小相对于输入中的详细信息较为粗略,则必须注意输出像元大小的处理方式。内部栅格化过程将采用与面转栅格工具相同的默认像元分配类型方法,即像元中心法。这意味着,不在像元中心的数据将不会包含在中间栅格化源输出中,因此也不会在距离计算中表示出来。例如,如果您的源是一系列相对于输出像元大小偏小的面,如建筑物覆盖区,则可能只有一部分面会落入输出栅格像元的中心,从而导致分析中会缺少其他大部分面。
为避免出现这种情况,在中间步骤,您可以使用面转栅格工具直接将输入要素栅格化并设置优先级字段。然后将生成的输出用作希望使用的特定距离工具的输入。或者,您可以选择一个小的像元大小以从输入要素中捕获适当量的详细信息。
当源输入是要素时,默认情况下,将使用第一个有效可用字段。如果不存在有效字段,则将使用 ObjectID 字段(例如 OID 或 FID,取决于要素输入的类型)。
在输入成本栅格数据中含有 NoData 的像元位置充当成本面工具中的障碍。在输入成本表面,任意被分配 NoData 的像元位置,都会在所有输出栅格(成本距离、分配和回溯链接)上接收到 NoData。
如果输入源数据与成本栅格数据的范围不同,则默认的输出范围是两者的交集。要获取全部范围的成本距离面,请在输出范围环境设置中选择输入的并集选项。
最大距离以与成本栅格相同的成本单位指定。
对于输出距离栅格,距离至一组源位置的像元的最小成本距离(或最小累积成本距离)是从该像元至全部源位置的最小成本距离范围的下限。
成本栅格不能包含零值,因为该算法是乘法过程。如果成本栅格中的确包含表示成本最低区域的零值,则请在运行成本距离前,通过首先运行条件函数工具将零值更改为较小的正值(如 0.01)。如果零值表示的是应从分析中排除的区域,则应在运行成本距离前,通过首先运行设为空函数工具将这些值更改为 NoData。
源的特征或与源之间的通信可由特定参数进行控制。源成本倍数参数可确定行程模式或源的量级,源开始成本设置移动开始前的开始成本,源阻力比率是一种关于累计成本影响的动态调整,例如,模拟徒步者会有多么疲劳,源容量 设置源在到达极限前可同化多少成本。行驶方向可确定移动是否从源开始并移动至非源位置,或从非源位置移动回源。
如果指定了源开始成本,并且行程方向为行驶自源,则输出成本距离表面上的源位置将被设置为源开始成本的值;否则,输出成本距离表面上的源位置将被设置为零。
如果使用字段指定任一源特征参数,则根据给定源数据字段的信息,源特征将应用于各个源。当给定关键字或常量值,将应用于所有源。
有关适用于此工具的地理处理环境的详细信息,请参阅分析环境和 Spatial Analyst。
语法
CostDistance (in_source_data, in_cost_raster, {maximum_distance}, {out_backlink_raster}, {source_cost_multiplier}, {source_start_cost}, {source_resistance_rate}, {source_capacity}, {source_direction})
参数 | 说明 | 数据类型 |
in_source_data | 输入源位置。 此为栅格或要素数据集,用于标识计算每个输出像元位置的最小积累成本距离所依据的像元或位置。 对于栅格,输入类型可以为整型或浮点型。 | Raster Layer; Feature Layer |
in_cost_raster | 定义以平面测量的经过每个像元所需的阻抗或成本。 每个像元位置上的值表示经过像元时移动每单位距离所需的成本。每个像元位置值乘以像元分辨率,同时也会补偿对角线移动来获取经过像元的总成本。 成本栅格的值可以是整型或浮点型,但不可以为负值或零(不存在负成本或零成本)。 | Raster Layer |
maximum_distance (可选) | 定义累积成本值不能超过的阈值。 如果累积的成本距离值超过该值,则像元位置的输出值为 NoData。最大距离定义计算累积成本距离适用的范围。 默认距离是到输出栅格边的距离。 | Double |
out_backlink_raster (可选) | 输出成本回溯链接栅格。 回溯链接栅格包含从 0 到 8 的值,这些值用于定义方向或从某像元开始沿最小累积成本路径标识下一个邻近像元(接续像元),以达到最小成本源。 如果该路径穿过右侧的相邻像元,则为像元分配值 1、2 来与右下角像元相对应,并按顺时针方向依此类推。值 0 留供源像元使用。 | Raster Dataset |
source_cost_multiplier (可选) | 要应用于成本值的乘数。 用于控制源的出行或放大模式。乘数越大,在每个像元间移动的成本将越大。 值必须大于零。默认值为 1。 | Double; Field |
source_start_cost (可选) | 开始计算成本时的起始成本。 适用于与源相关的固定成本规范。成本算法将从通过 source_start_cost 设置的值开始,而非从零成本开始。 值必须大于等于零。默认值为 0。 | Double; Field |
source_resistance_rate (可选) | 此参数将模拟累积成本增加时所耗费成本的增加情况。用于为旅行者的疲劳程度建模。利用到达某个像元的累积成本的增长量乘以阻力比率,再加上移动至下一个像元的成本。 这是修改后版本的用于计算移动经过像元的显性成本混合利率公式。随着阻力比率的值增加,之后访问的像元成本也随之增加。阻力比率越大,到达下一个像元需要加的附加成本也越多,将针对每个后续移动进行复合。由于阻力比率与复利率相似且累积成本值通常会很大,因此建议采用较小的阻力比率,如 0.02、0.005 或更小,具体取决于累积成本值。 值必须大于等于零。默认值为 0。 | Double; Field |
source_capacity (可选) | 定义源的行驶者的成本容量。 每个源的成本计算将在达到指定容量后停止。 值必须大于零。默认容量是到输出栅格边的容量。 | Double; Field |
source_direction (可选) | 应用源阻力比率和源开始成本时定义行驶者的方向。
指定将应用于所有源的 FROM_SOURCE 或 TO_SOURCE 关键字,或指定包含用于确定各个源行驶方向关键字的源数据字段。该字段必须包含字符串 FROM_SOURCE 或 TO_SOURCE。 | String; Field |
返回值
名称 | 说明 | 数据类型 |
out_distance_raster | 输出成本距离栅格。 此成本距离栅格用于标识每个像元到标识的源位置在成本表面上的最小累积成本距离。 源可以是一个像元、一组像元或者一个或多个要素位置。 输出栅格为浮点型。 | Raster |
代码示例
CostDistance 示例 1(Python 窗口)
以下 Python 窗口脚本演示了 CostDistance 工具的使用方法。
import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outCostDist = CostDistance("source.shp", "elevation", "", "backlink", "Multiplier", "StartCost", "Resistance", 500000)
outCostDist.save("C:/sapyexamples/output/costdist")
CostDistance 示例 2(独立脚本)
计算点 shapefile 的源位置中的最小累积成本距离栅格。
# Name: CostDistance_Ex_02.py
# Description: Calculates for each cell the least accumulative cost distance
# to the nearest source over a cost surface.
# 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
inSourceData = "source.shp"
inCostRaster = "elevation"
maxDistance = ""
outBkLinkRaster = "C:/sapyexamples/output/outbklink"
multiplier = "Multiplier"
startCost = "StartCost"
resistance = "Resistance"
capacity = 500000
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute CostDistance
outCostDistance = CostDistance(inSourceData, inCostRaster, maxDistance, outBkLinkRaster, multiplier, startCost,
resistance, capacity)
# Save the output
outCostDistance.save("C:/sapyexamples/output/outcostdist")
环境
许可信息
- ArcGIS Desktop Basic: 需要 Spatial Analyst
- ArcGIS Desktop Standard: 需要 Spatial Analyst
- ArcGIS Desktop Advanced: 需要 Spatial Analyst