计算坡度,并返回坡度栅格数据集,即坡度图。

命名空间:  SuperMap.Analyst.SpatialAnalyst
程序集:  SuperMap.Analyst.SpatialAnalyst (in SuperMap.Analyst.SpatialAnalyst)
版本: dll

语法

C#
public static DatasetGrid CalculateSlope(
	DatasetGrid sourceDatasetGrid,
	SlopeType slopeType,
	double zFactor,
	Datasource targetDatasource,
	string targetDatasetName
)

参数

sourceDatasetGrid
Type: SuperMap.Data..::.DatasetGrid
指定的的待计算坡度的 DEM 栅格。
slopeType
Type: SuperMap.Analyst.SpatialAnalyst..::.SlopeType
指定的坡度的单位类型。
zFactor
Type: System..::.Double
指定的高程缩放系数。该值是指在 DEM 栅格中,栅格值(Z 坐标,即高程值)相对于 X 和 Y 坐标的单位变换系数。通常有 X,Y,Z 都参加的计算中,需要将高程值乘以一个高程缩放系数,使得三者单位一致。例如,X、Y 方向上的单位是米,而 Z 方向的单位是英尺,由于 1 英尺等于 0.3048 米,则需要指定缩放系数为 0.3048。如果设置为 1.0,表示不缩放。
targetDatasource
Type: SuperMap.Data..::.Datasource
指定的存储结果数据集的数据源。
targetDatasetName
Type: System..::.String
指定的结果数据集的名称。

返回值

坡度栅格数据集。

备注

坡度是地表面上某一点的切面和水平面所成的夹角。坡度值越大,表示地势越陡峭。如下图所示,设坡度的角度值为 θ:

其中,H 为垂直距离,L 为水平距离。因此,则有 tanθ = H/L,而坡度百分数 = (H/L) * 100。

但对于 DEM 栅格,通常是以待计算单元格及其周围相邻的八个单元格作为计算单元,由水平方向高程变化率 fx 和垂直方向高程变化率 fy 来计算坡度,即:

其中,fx 和 fy 通过三阶反距离平方权差分法计算得出。对待计算单元格及其相邻的八个单元格进行编码,fx 和 fy 的计算公式如下:

坡度可以用角度、弧度或百分数来表示。以使用角度为例,坡度计算的结果范围为 0~90 度。弧度与角度具有换算关系:弧度 =(角度/180)* Π;这里需要注意坡度百分数的计算公式为:

如果待计算单元格为无值,则计算结果也为无值。需要注意,对于位于栅格数据集的边缘的单元格,其 3 × 3 邻域包含了位于数据集范围之外的单元格,对于这些单元格,将使用待计算单元格的高程值来计算,因此,得出的坡度可能比实际要小。对于周围单元格中的无值,也采用相同的方式处理。

新生成的坡度数据集是一个和原数据集等大且分辨率相同的数据集。下图为计算坡度的一个实例。

注意:

计算坡度时,要求待计算的栅格值(即高程)的单位与 x,y 坐标的单位相同。如果不一致,可通过高程缩放系数(方法中对应 zFactor 参数)来调整。

但注意,当高程值单位与坐标单位间的换算无法通过固定值来调节时,则需要通过其他途径对数据进行处理。最常见的情况之一是 DEM 栅格采用地理坐标系时,单位为度,而高程值单位为米,此时建议对 DEM 栅格进行投影转换,将 x,y 坐标转换为平面坐标。

示例

以下代码示范了如何对给定的 DEM 栅格计算坡度,并返回计算结果(一个栅格数据集)。

CopyC#
private DatasetGrid GridSlopeCalculate(DatasetGrid sourceDatasetGrid, Datasource targetDatasource)
{
    //设置结果栅格数据集的名称,并检查数据源中是否已存在该数据集,如存在则删除
    String targetDatasetName = "gridSlope";
    if (targetDatasource.Datasets.Contains(targetDatasetName))
    {
        targetDatasource.Datasets.Delete(targetDatasetName);
    }

    //调用坡度计算方法,并获取计算结果栅格数据集
    DatasetGrid resultDatasetGrid = CalculationTerrain.CalculateSlope(sourceDatasetGrid, SlopeType.Degree, 1.0, targetDatasource, targetDatasetName);

    return resultDatasetGrid;
}

版本信息

SuperMap iObjects .NET


请参见