Thanks Nicolas for your reply. It does seem to be a memory problem, although it doesnt show the typical "Memory Error". Without the script I could do that operation with the same rasters. It involves four files and it is basically (a-b)*(c-d).
GDAL also failed to load all files at once, so I finally splited the operation in 3. (a-b) then (c-d) and finaly the multiplication of the outputs. Its much more time consuming but it works. I still dont understand why using the tool directly from the UI it wrks and it doesnt from the script. Will write back if I find the correct way. > > Hi, > > I have never use the Qgis raster calculator via Python so I can't help > there. What is the problem? Does Qgis crash? If so, the rasters may be to > big for the memory. You mentioned the rasters were very big and that may > be the problem. I recommend you test the calculation with smaller > rasters. I think they are working for a solution for the big raster math. > > Saga and gdal calculator may help. Saga will probably try to load > everything in memory an may crash. Gdal is made to calculate very big > rasters but layers must be in the same CRS and have the same pixel posting > and extent. You can use it direction in the Osgeo command prompt or via > processing. > > Nicolas > > > Envoyé de mon iPad > > > Le 13 sept. 2016 à 05:42, ROMAN HG [via OSGeo.org] < > [email protected] <javascript:;>> a écrit : > > > > Hi, > > > > I'm trying to do raster calculations with big and multiple rasters. I am > new to python, but I managed to use the QgsRasterCalculator algorithm to do > the average of three rasters. > > > > The problem comes when I introduce a forth layer and try to do a more > complex equation: > > > > #calculating c4s ( [c1-c2]*[c0-c3] ) > > > > #F1_30 > > A=processing.getObjectFromUri(path + "/F1_30c1.tif") > > B=processing.getObjectFromUri(path + "/F1_c2.tif") > > C=processing.getObjectFromUri(path + "/F1_30c0.tif") > > D=processing.getObjectFromUri(path + "/F1_c3.tif") > > > > entries=[] > > rasA=QgsRasterCalculatorEntry() > > rasA.ref='A@1' > > rasA.raster=A > > rasA.bandNumber=1 > > entries.append(rasA) > > > > rasB=QgsRasterCalculatorEntry() > > rasB.ref='B@1' > > rasB.raster=B > > rasB.bandNumber=1 > > entries.append(rasB) > > > > rasC=QgsRasterCalculatorEntry() > > rasC.ref='C@1' > > rasC.raster=C > > rasC.bandNumber=1 > > entries.append(rasC) > > > > rasD=QgsRasterCalculatorEntry() > > rasD.ref='D@1' > > rasD.raster=D > > rasD.bandNumber=1 > > entries.append(rasD) > > > > F1_30c4=QgsRasterCalculator('(( A@1 - B@1 ) * ( C@1 - D@1 ))', path + > '/F1_30c4.tif', 'GTiff', base.extent(), base.width(), base.height(), > entries).processCalculation() > > > > I think that the problem is recognising the formula. I have tried it on > the console doing several changes and it doesnt work. > > > > Is it possible to do this operation with QgsRasterCalculator?? Or how > can I use the gdal_calc algorithm or the saga raster calculator?? > > > > > > Thanks all >
_______________________________________________ Qgis-user mailing list [email protected] List info: http://lists.osgeo.org/mailman/listinfo/qgis-user Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-user
