Skip to main content

坡度的工作原理

需具备 3D Analyst 许可方可使用。

需具备 Spatial Analyst 许可方可使用。

坡度工具可确定栅格表面每个像元处的陡度。 坡度值越小,地势越平坦;坡度值越大,地势越陡峭。

注:

表面参数工具可提供坡度的较新实施,建议使用该工具来代替坡度工具。 坡度工具可将一个平面与九个局部像元进行拟合,但是,平面可能并非景观的良好描述符,可能会掩盖或夸大感兴趣的自然变化。 表面参数工具可将一个表面与像元邻域而不是平面进行拟合,以提供针对地形的更自然的拟合效果。

坡度工具始终使用 3 × 3 像元窗口来计算值,而表面参数工具允许窗口大小介于 3 × 3 到 15 × 15 像元之间。 较大的窗口尺寸对于高分辨率高程数据很有用,可以适当的比例捕获地表过程。 表面参数工具还可提供自适应窗口选项,该选项可评估地形的局部变异性,并为每个像元标识最大的适当邻域大小。 对于被河流、道路或陡坡中断的平缓且均匀的地形而言,该工具很有用。

如果您需要结果与先前工具运行结果完全匹配,或者快速处理时间比更好的算法更重要,则可以继续使用坡度工具的传统方法。

输出坡度栅格可使用两种单位计算:度和百分比(高程增量百分比)。 如果将高程增量百分比视为高程增量除以水平增量后再乘以 100,就可以更好地理解高程增量百分比。 请参考下面的三角形 B。 当角度为 45 度时,高程增量等于水平增量,所以高程增量百分比为 100%。 如三角形 \(C\) 所示,当坡度角接近直角(90 度)时,高程增量百分比开始接近无穷大。

以度和百分比计的坡度

比较以度为单位和以百分比为单位的坡度值。

坡度工具最常用在高程数据集处理中,如下图所示。 较陡的坡度在输出坡度栅格上以暗棕色阴影显示。

坡度输出示例

该工具可与其他类型的连续数据(如人口)配合使用,用来识别值的急剧变化。

计算方法和边缘效应

有两种方法可用于坡度计算。 可以使用方法参数在执行平面测地线计算之间进行选择。

对于平面方法,坡度按一个像元到与其直接相邻的像元方向上值的最大变化率进行测量。 利用 2D 笛卡尔坐标系对投影平面执行计算。 将使用三阶有限差分估值器计算坡度值。

使用测地线方法时,通过将地球形状视为椭球体,在 3D 笛卡尔坐标系中执行计算。 通过测量地形面与参考基准面之间的角度来计算坡度值。

可以使用 3 像元 x 3 像元的邻域(移动窗口)来执行平面和测地线计算。 对于每个邻域,如果处理(中心)像元为 NoData,则输出也为 NoData。 计算还要求至少 7 个与处理像元相邻的像元具有有效值。 如果有效像元少于 7 个,则不执行计算,并且该处理像元处的输出将为 NoData。

输出栅格最外侧行列的像元为 NoData。 这是因为沿着输入数据集边界,这些像元没有足够的有效相邻像元。

平面方法

坡度计算为从中心像元到每个相邻像元在水平 (dz/dx) 和垂直 (dz/dy) 方向上的表面变化率(增量)。 用来计算坡度的基本算法如下所示:

\(slope_{radians} = \arctan ( √ ( [dz/dx] ^2 + [dz/dy] ^2 ) )\)

坡度通常以度为单位来测量,其算法如下所示:

\(slope_{degrees} = \arctan ( √ ([dz/dx] ^2 + [dz/dy] ^2 ) ) * 57.29578\)

注:

这里显示的值 57.29578 是对 180/pi 的计算结果进行截断而得到的值。

坡度算法也可以表示为:

\(slope_{degrees} = \arctan ( {rise_run} ) * 57.29578\)

  • 其中:

    \({rise_run} = √ ([dz/dx] ^2 + [dz/dy] ^2 ]\)

中心像元及其相邻的八个像元的值确定水平增量和垂直增量。 这些相邻的像元使用字母 \(a\)\(i\) 进行标识,其中 \(e\) 表示当前正在计算坡度的像元。

表面分析窗口

表面分析扫描窗口

像元 \(e\) 在 x 方向上的变化率将通过以下算法进行计算:

\([dz/dx] = ((c + 2 f + i) * 4 / {wght1} - (a + 2 d + g) * 4 / {wght2} ) / (8 * {x_cellsize} )\)

  • 其中:

    \(wght1\)\(wght2\) 是有效像元的水平加权计数。

    例如,如果:

    • \(c\)\(f\)\(i\) 均有一个有效值,则 \(wght1\) = (1 + 2 * 1 + 1) = 4。

    • \(i\) 为 NoData,则 \(wght1\) = (1 + 2 * 1 + 0) = 3。

    • \(f\) 为 NoData,则 \(wght1\) = (1 + 2 * 0 + 1) = 2。

    除邻域位置为 \(a\)\(d\)\(g\) 以外,类似的逻辑也适用于 \(wght2\)

像元 \(e\) 在 y 方向上的变化率使用以下算法进行计算:

\([dz/dy] = ((g + 2 h + i) * 4 / {wght3} - (a + 2 b + c) * 4 / {wght4} ) / (8 * {y_cellsize})\)

  • 其中:

    \(wght\)\(wght4\) 与 [dz/dx] 计算中的概念相同。

平面坡度计算示例

例如,将计算如下所示的移动窗口内中心像元的坡度值。

坡度示例输入

坡度示例输入

中心像元 \(e\) 在 x 方向上的变化率为:

\[ \begin{align*} [dz/dx] &= ((c + 2 f + i) * 4 / wght1 - (a + 2d + g) * 4 / wght2) / (8 * {x_cellsize}) \ &= \mathsf { ((50 + 60 + 10) * 4 /(1 + 2 + 1) - (50 + 60 + 8) * 4 /(1 + 2 + 1)) / (8 * 5) } \ &= \mathsf { (120 - 118) / 40 } \ &= \mathsf {0.05} \end{align*} \]

像元 \(e\) 在 y 方向上的变化率为:

\[ \begin{align*} [dz/dy] &= ((g + 2 h + i) * 4 / wght3 - (a + 2 b + c) * 4 / wght4) / (8 * {y_cellsize}) \ &= \mathsf { ((8 + 20 + 10) * 4 /(1 + 2 + 1) - (50 + 90 + 50) * 4 /(1 + 2 + 1)) / (8 * 5) } \ &= \mathsf { (38 - 190 ) / 40 } \ &= \mathsf { -3.8 } \end{align*} \]

代入 x 方向和 y 方向上的变化率,使用下列算法来计算中心像元 \(e\) 的坡度:

\[ \begin{align*} rise_run &= √ ([dz/dx]^2 + [dz/dy]^2 ) \ &= \mathsf { √ ((0.05)^2 + (-3.8)^2) } \ &= \mathsf { √ (0.0025 + 14.44) } \ &= \mathsf { 3.80032 } \end{align*} \]

且,

\[ \begin{align*} slope_degrees &= \arctan ( rise_run) * 57.29578 \ &= \mathsf { \arctan (3.80032) * 57.29578 } \ &= \mathsf { 1.31349 * 57.29578 } \ &= \mathsf { 75.25762 } \end{align*} \]

像元 \(e\) 的整型坡度值为 75 度。

坡度示例输出

坡度示例输出

测地线方法

测地线方法通过将地球形状视为椭球体,在 3D 地心坐标系(也称为地心地固 (ECEF) 坐标系)中测量坡度。 计算结果不受数据集投影方式的影响。 如果在空间参考中定义了 z 单位,此方法将使用输入栅格的 z 单位。 如果输入的空间参考未定义 z 单位,则需要使用 z 单位参数进行定义。 使用测地线方法生成的坡度比使用平面方法生成的更精确。

测地线坐标转换

地心地固 (ECEF) 坐标系是以地心为原点的 3D 右手笛卡尔坐标系,其中所有位置均由 x、y 和 z 坐标表示。 有关以地心坐标系表示的目标位置 (\(T\)) 的示例,请参见下图。

ECEF 坐标系

将表面栅格从输入坐标系转换到 3D 地心坐标系中。

测地线计算使用基于其测地坐标(纬度 \(φ\)、经度 \(λ\)、高度 \(h\))计算的 x、y 和 z 坐标。 如果输入表面栅格的坐标系为投影坐标系 (PCS),则需要先将栅格重新投影到地理坐标系 (GCS),其中每个位置均具有测地坐标,然后将其转换为 ECEF 坐标系。 高度 h(z 值)是以椭球体表面为参考的椭球体高度。 请参见下图。

椭球体高度

椭球体高度

要从测地坐标(纬度 \(φ\)、经度 \(λ\)、高度 \(h\))转换为 ECEF 坐标,请使用以下公式:

\(X = (N(φ) + h) \cos φ \cos λ\)

\(Y = (N(φ) + h) \cos φ \sin λ\)

\(Z = (b^2 / a^2 * N (φ) + h) \sin φ\)

  • 其中:

    \(N(φ) = a^2 / √(a^2 \cos φ^ + b^2 \sin φ^2)\)

    \(φ\) 是纬度

    \(λ\) 是经度

    \(h\) 是椭球体高度

    \(a\) 是椭球体的长轴

    \(b\) 是椭球体的短轴

在以上公式中,椭球体高度 \(h\) 以米为单位。 如果以任何其他单位指定输入栅格的 z 单位,则该单位将内部转换为米。

坡度计算

测地线坡度是指地形面与椭球体表面之间形成的角度。 对于任何平行于椭球体表面的表面,其坡度为 0。 要计算每个位置处的坡度,可以使用最小二乘法 (LSM) 在每个处理像元周围拟合 3 像元 x 3 像元的邻域平面。 LSM 中的最佳拟合可使实际 z 值与拟合 z 值之间的平方差 (dzi) 的总和最小。 有关示例,请参见下图。

最小二乘拟合示例

最小二乘拟合示例

此处,平面表示为 z = Ax + By + C。 对于每个像元中心,dzi 是实际 z 值与拟合 z 值之间的差值。

如果 \({\Large \sum\limits _{i=1}^9}{{dz_i}^2}\) 最小,则平面将实现最佳拟合。

对平面进行拟合后,将在像元位置处计算表面法线。 在相同位置,还将计算与椭球体表面的切平面垂直的椭球体法线。

测地线坡度计算

测地线坡度计算

可以通过椭球体法线与地形面法线之间的角度(此处表示为 \(β\))来计算坡度(以度为单位)。 在上图中,角度 α 为测地线坡度,根据相等几何原理,该角度与角度 \(β\) 相等。

要以高程增量百分比计算坡度,可以使用以下公式:

\(Slope_{PercentRise} = \arctan (β) * 100\)

是否应使用表面参数工具?

如果输入栅格参数值为高分辨率值(其像元大小小于几米,或者特别是存在噪点),请考虑使用表面参数工具及其用户定义的邻域距离选项,而非此工具的直接 3 x 3 邻域。 使用较大邻域可以最大程度地减少噪点表面的影响。 当使用高分辨率表面时,使用较大邻域也可以更好地表示地形和表面特征。

GPU 的使用

对于测地线方法,如果您的系统上已安装某些 GPU 硬件,则此工具能够显著提高性能。 有关如何支持、配置以及启用此功能的详细信息,请参阅通过 Spatial Analyst 处理 GPU 一节。

参考文献

Marcin Ligas, and Piotr Banasik, 2011. Conversion between Cartesian and geodetic coordinates on a rotational ellipsoid by solving a system of nonlinear equations (GEODESY AND CARTOGRAPHY), Vol. 60, No 2, 2011, pp. 145-159

  1. Hofmann-Wellenhof, H. Lichtenegger and J. Collins, 2001. GPS - theory and practice. Section 10.2.1. p. 282.

David Eberly 1999. Least Squares Fitting of Data (Geometric Tools, LLC), pp. 3.