如何在QGIS中通过Python导出批量计算的TPI栅格文件?
批量计算DEM的TPI并导出为单独栅格文件
你的现有代码中,TPI参数设置为'TEMPORARY_OUTPUT',这会让计算结果仅作为临时图层存在,不会保存到本地。要实现导出为单独栅格文件,只需为每个DEM生成对应的输出路径,替换临时输出设置即可。
修改后的完整代码
import os from qgis.core import QgsProject base_dir = 'D:/Selected DEMs' # 过滤目录下的DEM文件(这里假设是tif格式,可根据实际格式调整后缀) fnames = [os.path.join(base_dir, fname) for fname in os.listdir(base_dir) if fname.lower().endswith('.tif')] for dem_path in fnames: # 提取原DEM的文件名和扩展名 dem_filename, ext = os.path.splitext(os.path.basename(dem_path)) # 构造TPI输出文件路径,添加_tpi后缀区分 tpi_output = os.path.join(base_dir, f"{dem_filename}_tpi{ext}") # 运行SAGA TPI计算工具,指定输出路径 processing.run( "saga:topographicpositionindextpi", { 'DEM': dem_path, 'TPI': tpi_output, # 替换临时输出为实际文件路径 'STANDARD': False, 'DW_WEIGHTING': 0, 'DW_IDW_POWER': 2, 'DW_BANDWIDTH': 75 } ) # 可选:将生成的TPI图层加载到QGIS界面(不需要可删除以下两行) tpi_layer = iface.addRasterLayer(tpi_output, f"{dem_filename}_TPI") QgsProject.instance().addMapLayer(tpi_layer) print(f"{dem_filename} 的TPI已计算并保存到:{tpi_output}")
关键说明
- 过滤DEM文件:添加了格式过滤条件
if fname.lower().endswith('.tif'),避免目录中无关文件被误处理,可根据你的DEM实际格式(如.asc、.img)修改后缀。 - 生成唯一输出路径:通过拆分原文件名和扩展名,拼接
_tpi后缀,保证每个TPI文件与源DEM一一对应,且不会覆盖原文件。 - 替换输出参数:把
'TEMPORARY_OUTPUT'替换为构造好的tpi_output路径,让SAGA工具直接将计算结果保存到本地。 - 可选加载图层:代码中加入了加载TPI图层到QGIS的逻辑,方便即时查看结果,不需要的话可直接删除相关行。
内容的提问来源于stack exchange,提问作者hamid mohebzadeh
相关产品推荐
相关产品推荐

