需要 Spatial Analyst 许可。
当欧氏距离是直线(位置之间的直线距离)时,成本距离可以探索旅行者在地表上方的移动。成本距离工具通常用于创建源和目标之间的最小成本路径或廊道。
成本距离分析所解决的一些示例问题
- 识别要建造一条通往拟建学校的新道路的最小成本路径。
- 用野生动物廊道连接短尾猫的最佳栖息地,以允许物种在地区间活动。
- 查找新的管线以连接油田和精炼厂。
- 确定到达偏远地区受伤的徒步旅行者所在位置的最快方法。
- 在没有道路网络的情况下,在地表上方将军用坦克移动到远处目标。
成本分析的通用公式
从一个像元移动到另一像元的成本受到下列因素的影响:
- 表面特征(成本表面)。
- 移动者的特征。这会包括出行模式,例如步行或骑 ATV。
- 从一个像元移动到另一像元时的移动特征,例如上坡或下坡。
通用成本距离公式如下:
Cost = Cost of travel * Characteristics * Movement characteristics over surface of the mover on the surface
成本距离工具可通过成本表面整合表面特征,这将在下文中进行讨论。要了解如何在距离工具内控制移动者的特征,请参阅源特征如何影响成本距离分析。路径距离工具可用于通过表面栅格以及水平和垂直因素来定义像元之间的移动特征。
成本距离和成本连通性
成本连通性工具可用于在一系列输入区域之间创建最佳路径网络。工具的成本距离和成本路径序列可用于创建已标识源和目标之间的路径。但是,通过迭代式隔离区域作为源,然后将其连接到其他已标识为目标的区域,已将两个工具序列偶尔用于创建路径网络。将对每个区域重复该过程,并对所生成的最小成本路径进行合并。
迭代方法的限制如下:
- 连接一个区域和另一个区域可创建不可行数量的路径,尤其是存在大量区域时。而且,所生成的网络会忽略连通性的中间方法;即,要达到距离区域,可以使用一系列路径,而这些路径可连接您和较远区域之间的区域序列。
- 要减少路径的组合数量,可以多次连接两个最近的区域 - 欧氏距离用于标识源和目标。但是,虽然两个区域彼此接近,但由于两个区域之间存在山脉或河流而导致出行成本非常昂贵;因此,如果两个区域位于成本连通性内,基于成本邻近性来连接区域将更有利。
即使区域 A 和 B 在欧氏距离中非常近,由于两个区域之间存在山脉,它们在成本距离中却非常远。 - 可以多次连接不同区域的不同路径,并且这些路径会沿着至公共区域的同一路径(这些路径会沿着同一公共最小成本路径)。管理和分析这些栅格路径的共享部分非常困难;因此,执行后续分析时,最好将每个路径视为独立的实体。
- 由成本路径创建的路径只能到达面区域的边以及线性区域的线上某一位置。因此,将不连接单个路径,也不会创建网络。
计算成本距离
实际上,所有的成本距离工具都使用相同算法计算输出。主要差别在于各工具的主要输出。
成本距离工具可创建输入栅格,在栅格中为每个像元分配到最近源像元的累积成本。该算法应用在图论中使用的结点和连接线像元制图表达。在结点和连接线制图表达中,各像元的中心被视为结点,并且各结点通过多条连接线与其相邻结点连接。
每条连接线都带有关联的阻抗信息。阻抗是根据与连接线各端点上的像元相关联的成本(从成本表面),和在像元中的移动方向确定的。
分配给各像元的成本表示在像元中移动每单位距离所需的成本。每个像元的最终值由像元大小乘以成本值求得。例如,如果成本栅格的一个像元大小为 30,某特定像元的成本值为 10,则该像元的最终成本是 300 单位。
结点行程成本
相邻结点间的行程成本取决于这两个结点的空间方向。像元的连接方式也会影响行程成本。
相邻结点成本
从一个像元移动到四个与其直接邻接的像元之一时,跨越连接线移动到相邻结点的成本为用 1 乘以像元 1 与像元 2 的和,再除以 2:
a1 = (cost1 + cost2) / 2
- Where
cost1 - 像元 1 的成本
cost2 - 像元 2 的成本
a1 - 从像元 1 到像元 2 连接线的总成本
垂直累积成本
累积成本由以下公式确定:
accum_cost = a1 + (cost2 + cost3) / 2
- Where
cost2 - 像元 2 的成本
cost3 - 像元 3 的成本
a2 - 从像元 2 移动到 3 的成本
accum_cost - 从像元 1 移动到像元 3 的累积成本
对角结点成本
如果沿对角线移动,则连接线上的行程成本为 1.414214(或 2 的平方根)乘以像元 1 的成本加上像元 2 的成本,再除以 2:
a1 = 1.414214 (cost3 + cost2) / 2
确定对角线移动的累积成本时,必须使用以下公式:
accum_cost = a1 + 1.414214(cost2 + cost3) / 2
累积成本像元列表
使用图论创建累积成本距离栅格可视作识别最低成本像元的尝试,并将其添加到输出列表。这是起始于源像元的迭代过程。目标是为每个像元快速分配成本距离栅格。
在初次迭代中,识别出源像元并分配 0 值,因为它们返回自身不消耗累积成本。接下来,启用全部源像元的近邻,使用上述累积成本公式将成本分配到源像元结点与邻近像元结点之间的连接线。各邻域像元都可以达到某个源;因此,可以选择它们或将它们分配给输出累积成本栅格。要分配到输出栅格,像元必须具有到达某个源的次最低成本路径。
累积成本值按由最低累积成本到最高累积成本的顺序排列于列表中。
从活动累积成本像元列表中选择最低成本像元,然后将该像元位置的值分配给输出成本距离栅格。活动像元的列表会变大,以包括所选像元的近邻,因为此时这些像元已具有到达某个源的方式。列表中只有可能到达某个源的像元是活动的。使用累积成本公式计算移动到这些像元的成本。
再次选择列表中具有最低成本的活动像元,扩大邻域,计算新的成本,并将新的成本像元添加到活动列表。
不必连接源像元。所有未连接的源对活动列表的影响相同。无论要分配到的源为何,仅选择和扩充具有最低累积成本的像元。
此分配过程继续执行。而且,如果通过将新像元位置添加到输出栅格创建新的成本较低的路径,则将更新活动列表上的像元。
当活动列表上出现新的像元路径时会进行此更新,因为更多的像元被分配到输出栅格。当活动累积成本列表上具有最低值的像元被分配到输出栅格时,计算所有累积成本。也会计算新分配的输出像元的相邻像元的成本,即使相邻像元位于其他像元的活动列表上。如果活动列表上的位置的新累积成本大于这些像元当前的累积成本,则忽略该值。如果活动列表上的位置新累积成本小于这些像元当前的累积成本,则使用新值替换掉活动列表上该位置的原有累积成本。此时已具有到达某个源的更廉价和更理想路径的像元在活动选择列表中上移。
在以下示例中,将第 3 行、第 1 列(用框高亮显示)的像元位置放在活动列表上时,它达到栅格顶部的源的累积成本为 11.0。然而,因为较低的源扩展到此位置,该像元获得了到达其他源的更廉价的累积成本路径。由于存在这一较低的累积成本,因此应早些在活动列表上更新该位置的值,并分配到输出。
如果在输入源栅格上存在多个区域或多组互不相连的源像元,则增长过程继续,并且无论来自哪个源,都将从活动列表中分配最低成本像元。
当增长面相遇时,返回源的最低成本路径的确定过程会继续,直到所有具备条件的像元获得成本值为止。
可能出现这种情况:当增长模式的锋面相遇时,一个增长模式的像元将能够以更低成本到达其他组或增长模式中的某个源像元;如果的确如此,它们将被重新分配到新的源。这种行为先前以第 3 行、第 1 列的像元进行过表示,下面则以第 3 行、第 6 列处的像元再次说明。
选择活动列表中的所有像元时,其结果是累积成本或加权距离栅格。应用的流程可确保各像元具有最低累积成本。为所有像元执行此过程,直到遇到栅格的边、窗口的边界或达到最大距离为止。
不允许穿越包含 NoData 值的像元。一组 NoData 像元的后侧像元的最低累积成本由绕过这些位置所需的成本确定。如果输入成本栅格上的某像元位置分配了 NoData,则 NoData 将被分配到成本距离输出栅格上对应的像元位置。