I am trying to export existing raster layers as tif files. I just want to avoid saving each raster manually. this is the code I am trying to use, but it doesn't seem to work:
from PyQt4.QtCore import *
from qgis.core import *
from qgis.gui import *
import os
import sys
layers = iface.layerTreeView().selectedLayers()
for layer in layers:
output='Desktop'%layer.name%'.tif'
As specified in a comment below, I modified my code to this:
from PyQt4.QtCore import *
from qgis.core import *
from qgis.gui import *
import os
import sys
layers = iface.layerTreeView().selectedLayers()
for layer in layers:
file_name = 'D:\tif' + layer.name() + '.tif'
file_writer = QgsRasterFileWriter(file_name)
pipe = QgsRasterPipe()
provider = layer.dataProvider()
if not pipe.set(provider.clone()):
print "Cannot set pipe provider"
continue
file_writer.writeRaster(
pipe,
provider.xSize(),
provider.ySize(),
provider.extent(),
provider.crs())
I can't seem to get it to work and I am not getting any error.
I already selected the layers and it still does not work.
Best Answer
Your code doesn't work because you're not doing anything in your
for
loop (except setting a file name).Saving a raster is a bit tedious, afaik. Here is a sample code I gathered from varied sources; I didn't test it, so it might need some adjustments. It relies on the
QgsRasterPipe
andQgsRasterFileWriter
classes.Note: I'd love to know if there is a simpler way to save rasters!
EDIT: added dummy path in
file_name
(full path is required).