计算滑坡风险,通常需要构建一个包含多个环境因子的模型。通常来说,数字高程模型(DEM)是生成多种关键地形因子的基础。
以下将根据 DEM 栅格图层进行的核心预处理步骤,以生成用于滑坡风险分析的输入变量:
注意:请将DEM投影到合适的坐标系后,再进行如下计算。
1. 计算坡度 (Slope)
为什么重要? 坡度是影响斜坡稳定性的最直接因素。陡峭的斜坡更容易发生滑坡。
如何操作?
在QGIS中使用:Raster → Analysis → Terrain analysis → Slope 工具。或使用处理算法:native:slope。
参数设置建议:
Input layer: 选择 DEM图层
z- factor: 这个值用于统一水平单位和垂直单位的比例。由于DEM图层的坐标系单位是米,且高程数据也为米,因此 Z factor 通常设为 1。
Output file: 例如 d:/output/slope.tif
输出结果: 一个新的栅格图层,每个像元的值代表该位置的坡度(默认为度)。

2. 计算坡向 (Aspect)
为什么重要? 坡向决定了斜坡接收日照、降雨和风力的方向,这会影响土壤湿度、植被覆盖和冻融循环,从而间接影响滑坡风险。例如,迎风坡或背阴坡可能更湿润、更不稳定。
如何操作?
使用:Raster → Analysis → Terrain analysis → Aspect 工具。
或使用处理算法:native:aspect。
参数设置建议:
Input layer: 选择 DEM图层
Output file: 例如 d:/output/aspect.tif
输出结果: 一个新的栅格图层,每个像元的值代表坡面朝向的角度(0-360度,90°=东,180°=南,270°=西,0°/360°=北)。

3. 计算曲率 (Curvature) - 可选但推荐
为什么重要? 曲率描述了地表的弯曲程度(剖面曲率和平面曲率)。凸起的山脊(正剖面曲率)容易排水,而凹陷的山谷(负剖面曲率)容易积水,积水会增加滑坡风险。
如何操作?
使用:Raster → Analysis → Terrain analysis → Curvature 工具。
或使用处理算法:native:curvature。
输出结果: 可以生成剖面曲率、平面曲率等栅格。
4. 计算地形起伏度 (Relief) 或 山体阴影 (Hillshade) - 辅助可视化
山体阴影 (Hillshade):
作用: 虽然不直接作为风险模型的输入,但它能极大地帮助您可视化地形,直观地识别出潜在的陡崖、沟谷等地貌,验证前面生成的坡度、坡向图是否合理。
如何操作: 使用 native:hillshade 算法。
地形起伏度:
作用: 计算一定窗口内最大高程与最小高程的差值,反映局部区域的相对高差。

5. (如果需要)提取水文信息
如果您的滑坡风险与汇水区、河流侵蚀有关,您可以基于DEM进行水文分析:
填洼 (Fill Sinks): 消除DEM中的小凹陷,确保水流路径连续。
流向 (Flow Direction): 确定每个像元的水流方向。
汇流累积量 (Flow Accumulation): 识别出主要的河道和集水区。
这些工具可以在 Processing Toolbox 中搜索 "r.watershed" (GRASS) 或 "SAGA" 相关的工具找到。
点击这里,进一步了解如何提取水文信息。
PyQGIS代码
修改输出路径和DEM图层名称。将代码复制到QGIS的Python控制台中,一步实现数据输出。
# -*- coding: utf-8 -*-
from qgis.core import (
QgsProject,
QgsRasterLayer,
QgsProcessingAlgorithm,
QgsApplication,
QgsProcessingFeedback
)
import os
# 初始化处理框架(如果尚未初始化)
if 'processing' not in globals():
from processing.core.Processing import Processing
Processing.initialize()
# 获取当前工程和图层
project = QgsProject.instance()
layers = project.mapLayersByName('clipped_投影')
if not layers:
raise Exception("未找到名为 'clipped_投影' 的栅格图层!")
dem_layer = layers[0] # 获取DEM图层
input_dem = dem_layer.source() # 输入DEM路径或URL
# 设置输出目录
output_dir = r"d:/output"
os.makedirs(output_dir, exist_ok=True) # 确保输出文件夹存在
# 定义输出文件路径
slope_output = os.path.join(output_dir, "slope.tif")
aspect_output = os.path.join(output_dir, "aspect.tif")
hillshade_output = os.path.join(output_dir, "hillshade.tif")
# 创建反馈对象以便查看进度
feedback = QgsProcessingFeedback()
# 获取处理上下文
context = QgsProcessingContext()
context.setProject(project)
# -------------------------------
# 1. 计算坡度 (Slope)
# -------------------------------
print("正在计算坡度...")
params_slope = {
'INPUT': input_dem,
'Z_FACTOR': 1.0,
'OUTPUT': slope_output
}
# 运行坡度算法
result_slope = processing.run("native:slope", params_slope, context=context, feedback=feedback)
# 加载结果到地图
slope_layer = QgsRasterLayer(result_slope['OUTPUT'], "坡度")
if slope_layer.isValid():
QgsProject.instance().addMapLayer(slope_layer)
print(f"✅ 坡度图已生成并加载:{result_slope['OUTPUT']}")
else:
print("❌ 无法加载坡度图层")
# -------------------------------
# 2. 计算坡向 (Aspect)
# -------------------------------
print("正在计算坡向...")
params_aspect = {
'INPUT': input_dem,
'Z_FACTOR': 1.0,
'OUTPUT': aspect_output
}
# 运行坡向算法
result_aspect = processing.run("native:aspect", params_aspect, context=context, feedback=feedback)
# 加载结果到地图
aspect_layer = QgsRasterLayer(result_aspect['OUTPUT'], "坡向")
if aspect_layer.isValid():
QgsProject.instance().addMapLayer(aspect_layer)
print(f"✅ 坡向图已生成并加载:{result_aspect['OUTPUT']}")
else:
print("❌ 无法加载坡向图层")
# -------------------------------
# 3. 计算山体阴影 (Hillshade)
# -------------------------------
print("正在生成山体阴影...")
params_hillshade = {
'INPUT': input_dem,
'Z_FACTOR': 2.0, # 垂直夸张系数,增强视觉效果
'AZIMUTH': 315, # 光源方位角(西北方向)
'V_ANGLE': 45, # 光源高度角
'OUTPUT': hillshade_output
}
# 运行山体阴影算法
result_hillshade = processing.run("native:hillshade", params_hillshade, context=context, feedback=feedback)
# 加载结果到地图
hillshade_layer = QgsRasterLayer(result_hillshade['OUTPUT'], "山体阴影")
if hillshade_layer.isValid():
QgsProject.instance().addMapLayer(hillshade_layer)
print(f"✅ 山体阴影图已生成并加载:{result_hillshade['OUTPUT']}")
else:
print("❌ 无法加载山体阴影图层")
print("✅ 所有地形因子预处理完成!")
更多GIS分析问题,欢迎留言或联系我们。转载须注明出处。