成本分配 (空间分析)
插图
![]() |
Cost_Alloc = CostAllocation(Source_Ras, Cost_Ras) |
用法
-
输入源数据可以是要素类或栅格。
当输入源数据是栅格时,源像元集包括具有有效值的源栅格中的所有像元。具有 NoData 值的像元不包括在源集内。值 0 将被视为合法的源。使用提取工具可轻松地创建源栅格。
-
当输入源数据是要素类时,源位置在执行分析之前从内部转换为栅格。栅格的分辨率可以由像元大小环境来控制。默认情况下,分辨率将会设置为输入成本栅格的分辨率。
当输入源数据为面要素数据时,如果输出像元大小相对于输入中的详细信息较为粗略,则必须注意输出像元大小的处理方式。内部栅格化过程将采用与面转栅格工具相同的默认像元分配类型方法,即 CELL_CENTER。这意味着,不在像元中心的数据将不会包含在中间栅格化源输出中,因此也不会在距离计算中表示出来。例如,如果您的源是一系列相对于输出像元大小偏小的面,如建筑物覆盖区,则可能只有一部分面会落入输出栅格像元的中心,从而导致分析中会缺少其他大部分面。
为避免出现这种情况,在中间步骤,您可以使用面转栅格工具直接将输入要素栅格化并设置优先级字段,将生成的输出用作距离工具的输入。或者,您可以选择一个足够小的像元大小以从输入要素中捕获适当量的详细信息。
要计算分配,源位置可以有相关的值,该值是由源字段参数指定的。如果输入源是整型栅格,则默认字段为 VALUE。如果输入源是要素,则默认字段为属性表中的第一个整型字段。如果输入源数据是浮点型栅格,则必须指定整型值栅格参数。
当源输入是要素时,默认情况下,将使用第一个有效可用字段。如果不存在有效字段,则将使用 ObjectID 字段(例如 OID 或 FID,取决于要素输入的类型)。
在输入成本栅格数据中含有 NoData 的像元位置充当成本面工具中的障碍。在输入成本表面,任意被分配 NoData 的像元位置,都会在所有输出栅格(成本距离、分配和回溯链接)上接收到 NoData。
如果输入源数据与成本栅格数据的范围不同,则默认的输出范围是两者的交集。要获取全部范围的成本距离面,请在输出范围环境设置中选择输入的并集选项。
如果已在环境中设置了掩膜,则所有的掩膜像元会被视为 NoData 值。
如果已经在栅格分析窗口中定义掩膜,且要被掩膜的像元将掩膜源,则计算将对其余的源像元产生作用。在计算中不考虑被掩膜的源像元。会在所有输出栅格(距离、分配和回溯链接)数据上为这些像元位置分配 NoData。
输入赋值栅格在以下情况下非常有用:在替代值或区域将被使用时,或者在源是从产生二进制结果 0 或 1 的操作获得,从而失去了与这些位置相关联的原始区域值时。赋值栅格可恢复这些值,或允许对源位置中的其他区域值组合进行分析。
如果使用赋值栅格,赋值栅格可能会更改成本分配输出的配置和结果,而不会影响可选成本距离或回溯链接结果。
最大距离以与成本栅格相同的成本单位指定。
对于输出距离栅格,至一组源位置的像元的最小成本距离(或最小累积成本距离)是从该像元至全部源位置的最小成本距离范围的下限。
语法
参数 | 说明 | 数据类型 | |
in_source_data |
输入源位置。 此为栅格或要素数据集,用于标识计算每个输出像元位置的最小积累成本距离所依据的像元或位置。 对于栅格,输入类型可以为整型或浮点型。 如果输入源栅格是浮点型,则必须设置整型的 {in_value_raster}。此类赋值栅格优先于 {source_field} 中的任何设置。 | Raster Layer | Feature Layer | |
in_cost_raster |
定义以平面测量的经过每个像元所需的阻抗或成本。 每个像元位置上的值表示经过像元时移动每单位距离所需的成本。每个像元位置值乘以像元分辨率,同时也会补偿对角线移动来获取经过像元的总成本。 成本栅格的值可以是整型或浮点型,但不可以为负值或零(不存在负成本或零成本)。 | Raster Layer | |
maximum_distance (可选) | 定义累积成本值不能超过的阈值。 如果累积的成本距离值超过该值,则像元位置的输出值为 NoData。最大距离定义计算累积成本距离适用的范围。 默认距离是到输出栅格边的距离。 | Double | |
in_value_raster (可选) |
标识应该用于每个输入源位置的区域值的输入整型栅格。 对于每个源位置(像元或要素),由 {in_value_raster} 定义的值将被分配至所有分配到供计算使用的源位置的像元。此类赋值栅格优先于 {source_field} 中的任何设置。 | Raster Layer | |
source_field (可选) | 用于向源位置分配值的字段。该字段必须为整型。 如果已设置 {in_value_raster},则该输入中的值优先于 {source_field} 中的任何设置。 | Field | |
out_distance_raster (可选) |
输出成本距离栅格。 此成本距离栅格用于标识每个像元到标识的源位置在成本表面上的最小累积成本距离。 源可以是一个像元、一组像元或者一个或多个要素位置。 输出栅格为浮点型。 | Raster Dataset | |
out_backlink_raster (可选) |
输出成本回溯链接栅格。 回溯链接栅格包含从 0 到 8 的值,这些值用于定义方向或从某像元开始沿最小累积成本路径标识下一个邻近像元(接续像元),以达到最小成本源。 如果该路径穿过右侧的相邻像元,则为像元分配值 1、2 来与右下角像元相对应,并按顺时针方向依此类推。值 0 留供源像元使用。
| Raster Dataset |
返回值
名称 | 说明 | 数据类型 |
out_allocation_raster |
输出成本分配栅格。 该栅格可识别花费最小累积成本便可到达的每个源位置(像元或要素)的区域。 输出栅格为整型 | Raster |
代码实例
以下 Python 窗口脚本演示了成本分配工具的使用方法。
import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
out = ()
costAllocOut = CostAllocation("observers.shp", "costraster", 25000,"elevation",
"FID", "c:/sapyexamples/output/distout",
"c:/sapyexamples/output/backlinkout")
costAllocOut.save("c:/sapyexamples/output/costalloc")
该脚本使用成本栅格、源点的要素图层以及若干可选参数,来计算含有最近源的值的像元的栅格。
# Name: CostAllocation_Ex_02.py
# Description: Calculates for each cell its nearest source
# based on the least accumulative cost 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
inFeature = "observers.shp"
costRaster = "costraster"
maxDist = 25000
valRaster = "elevation"
featField = "FID"
outDistanceRaster = "c:/sapyexamples/output/distout"
outBacklink = "c:/sapyexamples/output/backlinkout"
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute CostAllocation
costAllocOut = CostAllocation(inFeature, costRaster, maxDist,
valRaster, featField, outDistanceRaster,
outBacklink)
# Save the output
costAllocOut.save("c:/sapyexamples/output/costalloc01")