[GRASS-dev] Re: [GRASS GIS] #1161: g.region and r.info decimal issue when using grass python libs

GRASS GIS trac at osgeo.org
Sun Oct 3 23:01:34 EDT 2010


#1161: g.region and r.info decimal issue when using grass python libs
-------------------------+--------------------------------------------------
  Reporter:  isaacullah  |       Owner:  grass-dev@…              
      Type:  defect      |      Status:  closed                   
  Priority:  normal      |   Milestone:  6.4.1                    
 Component:  Python      |     Version:  6.4.0                    
Resolution:  invalid     |    Keywords:  g.region, precision      
  Platform:  All         |         Cpu:  All                      
-------------------------+--------------------------------------------------

Comment(by cmbarton):

 Replying to [comment:12 glynn]:
 > Replying to [comment:7 cmbarton]:
 >
 > > Thanks again. We can follow this to ensure the matches within Java. I
 just wondered if this would be better accomplished within grass.region().
 This returns a dictionary (seen in our original post). I can't say exactly
 where the lossy conversion is happening--going into the dictionary, coming
 out of the dictionary, or at some other point.
 >
 > To be honest, I think that you're getting confused by Python's repr()
 (which is what's used to display the result when you enter an expression
 at the interactive prompt) using excess precision. Converting from decimal
 to floating-point results in an approximation, then repr() shows the
 approximated value exactly.
 >
 > >It's clear from your explanation that the representation of these
 values can change at various places. This all makes sense. But still most
 users would expect grass.run_command('g.region', flags='gp') and
 grass.region() to give the same results.
 >
 > They can't give the same results. One returns strings, the other
 numbers. These can never be the same thing:
 > {{{
 > > 4293588.60267 == '4293588.60267'
 > False
 > }}}
 > Even if you use you use run_command('g.region') to get the strings, as
 soon as you pass those strings to any GRASS module, they're going to be
 converted to floating-point.

 What I was thinking about was whether it is worth it or not to have an
 option to do a string conversion of these within the python library
 function so that the resulting dictionary has values that match the
 results (also string) of g.region. Within the GRASS environment, including
 Python, it doesn't really make any difference, since it is clear that
 str(extent) or print(extent) will produce the same result as g.region.

 The place where it could be helpful is in in a case like we have--where a
 Python script [using grass.region()] is being called and parsed by Java
 and g.region is being called and parsed by Java. Maybe the Java equivalent
 of the Python str() will also give the same answer or maybe it won't. This
 goes for other languages. I simply don't know--though we will run some
 tests to see. Perhaps this is a rare enough case, that it isn't worth the
 trouble to provide this option.

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



More information about the grass-dev mailing list