成本距离工具工作原理
实际上,所有的成本距离工具都使用相同算法计算输出。主要差别由各工具的主要输出决定。
计算成本距离
成本距离工具可创建输入栅格,在栅格中为每个像元分配到最近源像元的累积成本。该算法应用在图论中使用的结点/连接线像元制图表达。在结点/连接线制图表达中,各像元的中心被视为结点,并且各结点通过多条连接线与其相邻结点连接。
每条连接线都带有关联的阻抗。阻抗是根据与连接线各端点上的像元相关联的成本(从成本表面),和在像元中的移动方向确定的。
分配给各像元的成本表示在像元中移动每单位距离所需的成本。每个像元的最终值由像元大小乘以成本值求得。例如,如果成本栅格的一个像元大小为 30,某特定像元的成本值为 10,则该像元的最终成本是 300 单位。
结点行程成本
相邻两结点间的行程成本取决于这两个结点的空间方向。像元的连接方式也会影响行程成本。
相邻结点成本
从一个像元移动到四个与其直接连接的近邻之一时,跨越连接线移动到相邻结点的成本为用 1 乘以像元 1 与像元 2 的和,然后再除以 2:
a1 = (cost1 + cost2) / 2
- 其中:
cost1 - 像元 1 的成本
cost2 - 像元 2 的成本
a1 - 从像元 1 到像元 2 连接线的总成本
累积垂直成本
累积成本由以下公式确定:
accum_cost = a1 + (cost2 + cost3) / 2
- 其中:
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 将被分配到成本距离输出栅格上对应的像元位置。