[GRASS-dev] [GRASS GIS] #2053: r.recode: 0.0 or 1.0 as limits do not seem to be taken into account

GRASS GIS trac at osgeo.org
Sun Jul 20 12:54:49 PDT 2014


#2053: r.recode: 0.0 or 1.0 as limits do not seem to be taken into account
------------------------------------------+---------------------------------
 Reporter:  nikosa                        |       Owner:  grass-dev@…              
     Type:  defect                        |      Status:  new                      
 Priority:  normal                        |   Milestone:  7.0.0                    
Component:  Raster                        |     Version:  unspecified              
 Keywords:  r.recode, DCELL, CELL, rules  |    Platform:  Unspecified              
      Cpu:  Unspecified                   |  
------------------------------------------+---------------------------------

Comment(by annakrat):

 I've just run into this problem too. For some reason, r.recode tries to
 guess the input type from the recode rules which seems to be nonsense and
 leads to the errors above. -1.00 is considered as -1 and it reads the
 values from the input map as integers although the map can be DCELL. A
 simple change like this (they might be some more elegant way) seems to do
 what everyone expects:

 {{{
 Index: read_rules.c
 ===================================================================
 --- read_rules.c        (revision 61256)
 +++ read_rules.c        (working copy)
 @@ -50,7 +50,7 @@
      DCELL oLow, oHigh, nLow, nHigh;
      int line, n;

 -    in_type = out_type = CELL_TYPE;
 +    in_type = Rast_map_type(name, "");

      rules = (char **)G_malloc(INCR * sizeof(char *));
      rule_size = INCR;
 @@ -98,16 +98,12 @@
            lookup the values in the quant table */
         switch (sscanf(buf, "%lf:%lf:%lf:%lf", &oLow, &oHigh, &nLow,
 &nHigh)) {
         case 3:
 -           update_type(&in_type, oLow);
 -           update_type(&in_type, oHigh);
             update_type(&out_type, nLow);
             update_rules(buf);
             Rast_fpreclass_add_rule(&rcl_struct, oLow, oHigh, nLow, nLow);
             break;

         case 4:
 -           update_type(&in_type, oLow);
 -           update_type(&in_type, oHigh);
             update_type(&out_type, nLow);
             update_type(&out_type, nHigh);
             update_rules(buf);

 }}}

 It could be even enough if r.recode reads the map values as doubles always
 and takes care just of the output map type.

-- 
Ticket URL: <http://trac.osgeo.org/grass/ticket/2053#comment:2>
GRASS GIS <http://grass.osgeo.org>



More information about the grass-dev mailing list