[GRASS-dev] r.mapcalc bug on max and min?

Pietro peter.zamb at gmail.com
Mon Oct 6 01:51:20 PDT 2014


Dear all,

I would like to rescale a raster map from a -1, 1 interval to 0, 255.

To make an example I've tried to normalize the elevation map:

{{{
$ r.mapcalc "el = elevation / max(elevation)" --o
 100%
$ r.info el
 +----------------------------------------------------------------------------+
 | Map:      el                             Date: Mon Oct  6 10:29:19 2014    |
 | Mapset:   user1                          Login of Creator: pietro          |
 | Location: nc_basic_spm_grass7                                              |
 | DataBase: /home/pietro/docdat/gis                                          |
 | Title:     ( el )                                                          |
 | Timestamp: none                                                            |
 |----------------------------------------------------------------------------|
 |                                                                            |
 |   Type of Map:  raster               Number of Categories: 0               |
 |   Data Type:    FCELL                                                      |
 |   Rows:         1350                                                       |
 |   Columns:      1500                                                       |
 |   Total Cells:  2025000                                                    |
 |        Projection: Lambert Conformal Conic                                 |
 |            N:     228500    S:     215000   Res:    10                     |
 |            E:     645000    W:     630000   Res:    10                     |
 |   Range of data:    min = 1  max = 1                                       |
 |                                                                            |
 |   Data Description:                                                        |
 |    generated by r.mapcalc                                                  |
 |                                                                            |
 |   Comments:                                                                |
 |    elevation / max(elevation)                                              |
 |                                                                            |
 +----------------------------------------------------------------------------+

}}}

As you can see the result is a map with all the values that are 1.

Instead If I execute:

{{{
$ r.mapcalc "el = elevation / 156.3299" --o
 100%

$ r.info el
 +----------------------------------------------------------------------------+
 | Map:      el                             Date: Mon Oct  6 10:31:17 2014    |
 | Mapset:   user1                          Login of Creator: pietro          |
 | Location: nc_basic_spm_grass7                                              |
 | DataBase: /home/pietro/docdat/gis                                          |
 | Title:     ( el )                                                          |
 | Timestamp: none                                                            |
 |----------------------------------------------------------------------------|
 |                                                                            |
 |   Type of Map:  raster               Number of Categories: 0               |
 |   Data Type:    DCELL                                                      |
 |   Rows:         1350                                                       |
 |   Columns:      1500                                                       |
 |   Total Cells:  2025000                                                    |
 |        Projection: Lambert Conformal Conic                                 |
 |            N:     228500    S:     215000   Res:    10                     |
 |            E:     645000    W:     630000   Res:    10                     |
 |   Range of data:    min = 0.355522472489405  max = 0.999999772928615       |
 |                                                                            |
 |   Data Description:                                                        |
 |    generated by r.mapcalc                                                  |
 |                                                                            |
 |   Comments:                                                                |
 |    elevation / 156.3299                                                    |
 |                                                                            |
 +----------------------------------------------------------------------------+
}}}

Now it si working... do you know why this r.mapcalc expression:
"el = elevation / max(elevation)" is wrong?

Now trying to normalize del "el" map:

{{{
$ RAST="el"
$ NEW_MAX=255.
$ NEW_MIN=0.
$ r.mapcalc "s$RAST = int(float($RAST - min($RAST)) / float(max($RAST)
- min($RAST)) * ($NEW_MAX - $NEW_MIN) + $NEW_MIN)" --o
 100%
$ r.info sel
 +----------------------------------------------------------------------------+
 | Map:      sel                            Date: Mon Oct  6 10:42:42 2014    |
 | Mapset:   user1                          Login of Creator: pietro          |
 | Location: nc_basic_spm_grass7                                              |
 | DataBase: /home/pietro/docdat/gis                                          |
 | Title:     ( sel )                                                         |
 | Timestamp: none                                                            |
 |----------------------------------------------------------------------------|
 |                                                                            |
 |   Type of Map:  raster               Number of Categories: 0               |
 |   Data Type:    CELL                                                       |
 |   Rows:         1350                                                       |
 |   Columns:      1500                                                       |
 |   Total Cells:  2025000                                                    |
 |        Projection: Lambert Conformal Conic                                 |
 |            N:     228500    S:     215000   Res:    10                     |
 |            E:     645000    W:     630000   Res:    10                     |
 |   Range of data:    min = NULL  max = NULL                                 |
 |                                                                            |
 |   Data Description:                                                        |
 |    generated by r.mapcalc                                                  |
 |                                                                            |
 |   Comments:                                                                |
 |    int(float(el - min(el)) / float(max(el) - min(el)) * (255 - 0) + 0)     |
 |                                                                            |
 +----------------------------------------------------------------------------+
}}}

Again everything is NULL, I'm doing something wrong or it is a bug?

Best regards

Pietro


More information about the grass-dev mailing list