Feature request #8602
Clipper for multiple rasters
| Status: | Closed | ||
|---|---|---|---|
| Priority: | Normal | ||
| Assignee: | - | ||
| Category: | - | ||
| Pull Request or Patch supplied: | No | Resolution: | |
| Easy fix?: | No | Copied to github as #: | 17344 |
Description
Hello everybody,
I have written a Python script for clippling multiple rasters at once using gdal_translate (see http://fromgistors.blogspot.com/2013/09/how-to-clip-multiple-rasters-at-once.html).
# input variables
# where to save clipped rasters
outputDir = "/home/user/Desktop/clip"
# upper left point
UX, UY = 298545 , 4628145
# lower right point
LX, LY = 308715 , 4622745
# actual script
import os
lddLrs = qgis.utils.iface.legendInterface().layers()
for lyr in lddLrs:
if (lyr.type()==QgsMapLayer.RasterLayer):
os.system("gdal_translate -projwin " + str(UX) + " " + str(UY) + " " + str(LX) + " " + str(LY) + " -of GTiff " + str(lyr.source()) + " " + outputDir + "/" + str(lyr.name()) + ".tif")
qgis.utils.iface.addRasterLayer(str(outputDir + "/" + lyr.name() + ".tif"), str(lyr.name() + "_clip.tif"))
It would be nice if it can be implemented in the main Clipper tool in the Raster menu, or maybe ported to C++.
Cheers!
Associated revisions
[processing] add Clip raster by extent algorithm (fix #8602)
History
#1
Updated by Paolo Cavallini about 12 years ago
I suggest to add it to Processing instead: it should be much easier and more flexible.
#2
Updated by Luca Congedo about 12 years ago
- File Clip_Multiple_Rasters.py.help added
- File Clip_Multiple_Rasters.py
added
It sounds good to me.
I have written the script for the Processing framework in attachment. I have also added the option for No data values.
##Raster=group
##Input=multiple raster
# upper left point
##UX=number
##UY=number
# lower right point
##LX=number
##LY=number
##No_data=boolean
##No_data_value=number 0
##Output_directory=folder
import os
import processing
lddLrs = Input.split(';')
if No_data == 0:
for lyr in lddLrs:
os.system("gdal_translate -projwin " + str(UX) + " " + str(UY) + " " + str(LX) + " " + str(LY) + " -of GTiff " + str(lyr) + " " + Output_directory + "/clip_" + str(os.path.basename(str(lyr))))
#loading fails
#processing.load(str(Output_directory + "/clip_" + str(os.path.basename(str(lyr)))))
else:
for lyr in lddLrs:
os.system("gdal_translate -a_nodata " + str(No_data_value) + " -projwin " + str(UX) + " " + str(UY) + " " + str(LX) + " " + str(LY) + " -of GTiff " + str(lyr) + " " + Output_directory + "/clip_" + str(os.path.basename(str(lyr))))
#loading fails
#processing.load(str(Output_directory + "/clip_" + str(os.path.basename(str(lyr)))))
I have tested it in QGIS 1.8 (renaming to SEXTANTE) and QGIS 2.
Clipped rasters are loaded in QGIS 1.8, while it fails to load the clipped rasters in QGIS 2. Maybe I am missing something. However the clipping works.
Cheers!
#3
Updated by Alexander Bruy about 12 years ago
- Status changed from Open to Closed
Fixed in changeset 9ce316dbd3359e5ba0ffd468b666be35b7360318.
#4
Updated by Luca Congedo about 12 years ago
Perfect.
Thank you!