[Qgis-user] Raster calculator script failing for multiple rasters

R HG romanwebs at gmail.com
Tue Sep 13 23:04:43 PDT 2016


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] <
> ml-node+s1560n5285491h82 at n6.nabble.com <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 at 1'
> > rasA.raster=A
> > rasA.bandNumber=1
> > entries.append(rasA)
> >
> > rasB=QgsRasterCalculatorEntry()
> > rasB.ref='B at 1'
> > rasB.raster=B
> > rasB.bandNumber=1
> > entries.append(rasB)
> >
> > rasC=QgsRasterCalculatorEntry()
> > rasC.ref='C at 1'
> > rasC.raster=C
> > rasC.bandNumber=1
> > entries.append(rasC)
> >
> > rasD=QgsRasterCalculatorEntry()
> > rasD.ref='D at 1'
> > rasD.raster=D
> > rasD.bandNumber=1
> > entries.append(rasD)
> >
> > F1_30c4=QgsRasterCalculator('(( A at 1 - B at 1 ) * ( C at 1 - D at 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20160914/488742f4/attachment.html>


More information about the Qgis-user mailing list