Hi Michi and everyone,
Coincidentally, I also spent the better part of a whole day trying to figure out how to do the exact same thing yesterday with two float32 geotiff rasters. I tried many of the suggestions in the links Nicolas provided to no success (and many more leads - see below). I think one of the issues is most of the posts related to this are addressing how to replace a given value with a null value for symbology, versus replacing null values with some real number for calculations. In ArcGIS, after you have extended your example raster B to the extent of raster A (which fills in the new area of raster B with nodata values), you can use the Con(IsNull) statement to transform to null values to zero for use in raster calculations. I have learned a lot about QGIS in the process of sorting this out, but do not have a ready answer for what must be a fairly common user context. Any help would be greatly appreciated.

Regards,
Rob

http://gis.stackexchange.com/questions/108641/qgis-raster-calculator-need-values-to-be-set-to-0-instead-of-no-data
http://gis.stackexchange.com/questions/110248/saga-raster-calculator-ifelse-command-syntax-problem
http://gis.stackexchange.com/questions/42555/what-to-do-with-3-4e38-nodata-values
http://gis.stackexchange.com/questions/81640/how-to-set-all-pixels-with-value-0-to-nodata-in-dem-raster (hoping to reverse engineer this process)
http://gis.stackexchange.com/questions/22786/how-to-exclude-missing-values-from-raster-layer

Hi,
I am not a raster math genius but I will give this a shot.

1)". In this case all cells outside the extent of rasterB get assigned "nodata" which is the default -3.4028234663852886e+38 in my case. Is that correct?

-Yes that is a standard null data for float 16 or float 32 files. It can be change with gdal-warp or gdal-translate. I suspect that is you save the file in ASCII grid format, you will have no more null values... And less hard drive space!

-If you multiply a value by a null value, you will get a null value in the answer. That explains what is going on in point 1 and 2.

As for point 4, you can probably do it with a mask. Something like rasterA/rasterA should give you a mask with 1 where there is data and zero when not (I think. If not reset with gdal-translate). Then you can use the AND function to combine areas and find where raster A and B intersect and work your way from there. You could also find the extent of the rasters (in vectors) and then use the vectors to raster operation to create a mask.

Stuff I found:
http://gis.stackexchange.com/questions/22786/how-to-exclude-missing-values-from-raster-layer

http://gis.stackexchange.com/questions/12418/how-to-redefine-the-nodata-value-into-zero-in-qgis

http://gis-lab.info/qa/rastercalc-eng.html#How_does_it_work

http://gis.stackexchange.com/questions/33764/how-to-change-null-values-raster-values-to-0-in-qgis

http://docs.qgis.org/2.6/en/docs/training_manual/rasters/terrain_analysis.html#moderate-fa-using-the-raster-calculator

http://docs.qgis.org/2.2/en/docs/training_manual/processing/no_data.html

Good luck

Nicolas Cadieux M.Sc.
Les Entreprises Archéotec inc.
8548, rue Saint-Denis Montréal H2P 2H2
Téléphone: 514.381.5112  Fax: 514.381.4995
www.archeotec.ca

Le 2015-02-24 12:26, "Michael.Scholz [via OSGeo.org] " <[hidden email] <http://osdir.com/user/SendEmail.jtp?type=node&node=5189844&i=0>> a écrit :
Hey!
In QGIS 2.6.1 I spent the whole day on the raster calculator for some super-simple overlay calculations and I'm ending up in rage and fury. I don't want to complain about the unintuitive syntax. Rather I have some questions: 1) I have two raster with different extents. rasterA entirely contains rasterB. When I add these rasters (rasterA + rasterB) and set the output extent to the same as of rasterA, my result is only defined at the overlapping area of both rasters. In this case all cells outside the extent of rasterB get assigned "nodata" which is the default -3.4028234663852886e+38 in my case. Is that correct? 2) I extended rasterB to have the same extent as rasterA by filling the missing cells with "nodata". rasterA + rasterB still gives the same result as in 1). Why is "rasterA + nodata = nodata"? I just want values from rasterB to be added to values of rasterA AND keeping rasterA entirely where rasterB has no values. 3) How can I query the "nodata" value of a band?? Without being able to query it, I cannot set it to 0 which would solve all my problems. 4) I would like to express something like "(rasterB = nodata AND rasterA != nodata) * rasterA + (rasterB != nodata) * (rasterA + rasterB)". Is that possible?

Still in love with QGIS
Michi Scholz
_______________________________________________
Qgis-user mailing list
Qgis-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to