要使用QGIS编程实现根据行政区边界批量裁剪栅格,可以利用PyQGIS库来完成。
from qgis.core import QgsRasterLayer, QgsProject, QgsRectangle
# 设置行政区边界文件路径
boundary_file = '/path/to/admin_boundary.shp'
# 设置待裁剪的栅格文件夹路径
input_folder = '/path/to/input_rasters/'
# 设置输出文件夹路径
output_folder = '/path/to/output_rasters/'
# 加载行政区边界图层
boundary_layer = QgsVectorLayer(boundary_file, 'Admin Boundary', 'ogr')
# 遍历待裁剪的栅格文件夹中的所有文件
for filename in os.listdir(input_folder):
if filename.endswith('.tif'): # 只处理GeoTIFF格式的文件
input_file = os.path.join(input_folder, filename)
output_file = os.path.join(output_folder, filename)
# 加载待裁剪的栅格图层
input_layer = QgsRasterLayer(input_file, 'Input Raster')
# 获取行政区边界的空间范围
boundary_extent = boundary_layer.extent()
# 设置裁剪后的输出范围为行政区边界的范围
output_extent = QgsRectangle(
boundary_extent.xMinimum(),
boundary_extent.yMinimum(),
boundary_extent.xMaximum(),
boundary_extent.yMaximum()
)
# 根据输出范围裁剪栅格数据
processing.run("gdal:cliprasterbyextent", {
'INPUT': input_file,
'PROJWIN': f'{output_extent.xMinimum()} {output_extent.xMaximum()} {output_extent.yMinimum()} {output_extent.yMaximum()}',
'OUTPUT': output_file
})
# 注意,上述代码需要确保已经安装并正确配置了QGIS Python环境,并导入了所需的库。请根据实际情况修改代码中的文件路径。
该代码使用了QGIS中的`gdal:cliprasterbyextent`算法来裁剪栅格数据,裁剪后的输出栅格范围根据行政区边界的范围进行设置。请注意修改代码中的文件路径以适应你的实际情况,并确保已经安装所需的依赖库。