I am trying to create a for loop for coloring up multiple rasters simultaneously. I am able to do it for one layer, but trying to implement the for loop to do it for more than one layer is proving difficult.
import glob,os
rast_path="/home/user/Desktop/data/gsi/output"
rasters=glob.glob(os.path.join(rast_path,"*le.tif"))
print(rasters)
for raster in rasters:
# (rastdir,rastfile)=os.path.split(raster)
lyr=QgsRasterLayer(rasters,rastfile)
s=QgsRasterShader()
c=QgsColorRampShader()
c.setColorRampType(QgsColorRampShader.INTERPOLATED)
i=[]
i.append(QgsColorRampShader.ColorRampItem(-20,QtGui.QColor('#0c0101'),'-20'))
i.append(QgsColorRampShader.ColorRampItem(-15.1,QtGui.QColor('#ff0000'),'-15'))
i.append(QgsColorRampShader.ColorRampItem(-10,QtGui.QColor('#ff0000'),'-10'))
i.append(QgsColorRampShader.ColorRampItem(-5,QtGui.QColor('#ff0000'),'-5'))
i.append(QgsColorRampShader.ColorRampItem(0,QtGui.QColor('#ff0000'),'0'))
i.append(QgsColorRampShader.ColorRampItem(5,QtGui.QColor('#ff0000'),'5'))
i.append(QgsColorRampShader.ColorRampItem(10,QtGui.QColor('#ff0000'),'10'))
i.append(QgsColorRampShader.ColorRampItem(15,QtGui.QColor('#ff0000'),'15'))
i.append(QgsColorRampShader.ColorRampItem(15,QtGui.QColor('#0c0101'),'20'))
c.setColorRampItemList(i)
s.setRasterShaderFunction(c)
ps=QgsSingleBandPseudoColorRenderer(lyr.dataProvider(),1,s)
raster.setRenderer(ps)
QgsMapLayerRegistry.instance().addMapLayer(lyr)
# qgis.utils.iface.addRasterLayer(raster,rastfile)
Joseph
76.7k8 gold badges173 silver badges286 bronze badges
asked Jun 30, 2016 at 15:46
-
Where's your for loop? What have you tried? Where exactly are you stuck?Spacedman– Spacedman2016年06月30日 16:10:16 +00:00Commented Jun 30, 2016 at 16:10
-
@Spacedman, Sorry code updated there now.user1655130– user16551302016年07月01日 08:46:58 +00:00Commented Jul 1, 2016 at 8:46
1 Answer 1
I prefer adding rasters described from the QGIS docs which I've incorporated into your script in addition to importing a couple more required classes:
import glob, os
from PyQt4 import QtGui
from PyQt4.QtCore import QFileInfo
rast_path = "/home/user/Desktop/data/gsi/output"
rasters = glob.glob(os.path.join(rast_path, "*le.tif"))
print(rasters)
for raster in rasters:
fileInfo = QFileInfo(raster)
path = fileInfo.filePath()
baseName = fileInfo.baseName()
lyr = QgsRasterLayer(path, baseName)
s = QgsRasterShader()
c = QgsColorRampShader()
c.setColorRampType(QgsColorRampShader.INTERPOLATED)
i = []
i.append(QgsColorRampShader.ColorRampItem(-20,QtGui.QColor('#0c0101'),'-20'))
i.append(QgsColorRampShader.ColorRampItem(-15.1,QtGui.QColor('#ff0000'),'-15'))
i.append(QgsColorRampShader.ColorRampItem(-10,QtGui.QColor('#ff0000'),'-10'))
i.append(QgsColorRampShader.ColorRampItem(-5,QtGui.QColor('#ff0000'),'-5'))
i.append(QgsColorRampShader.ColorRampItem(0,QtGui.QColor('#ff0000'),'0'))
i.append(QgsColorRampShader.ColorRampItem(5,QtGui.QColor('#ff0000'),'5'))
i.append(QgsColorRampShader.ColorRampItem(10,QtGui.QColor('#ff0000'),'10'))
i.append(QgsColorRampShader.ColorRampItem(15,QtGui.QColor('#ff0000'),'15'))
i.append(QgsColorRampShader.ColorRampItem(15,QtGui.QColor('#0c0101'),'20'))
c.setColorRampItemList(i)
s.setRasterShaderFunction(c)
ps = QgsSingleBandPseudoColorRenderer(lyr.dataProvider(),1,s)
lyr.setRenderer(ps)
QgsMapLayerRegistry.instance().addMapLayer(lyr)
answered Jul 1, 2016 at 9:28
-
1Excellent. This works perfectuser1655130– user16551302016年07月01日 13:59:12 +00:00Commented Jul 1, 2016 at 13:59
-
@user1655130 - Awesome, glad it works :)Joseph– Joseph2016年07月01日 13:59:30 +00:00Commented Jul 1, 2016 at 13:59
Explore related questions
See similar questions with these tags.
lang-py