[GRASS-SVN] r51058 - grass/trunk/lib/python

svn_grass at osgeo.org svn_grass at osgeo.org
Wed Mar 14 16:56:55 EDT 2012


Author: martinl
Date: 2012-03-14 13:56:54 -0700 (Wed, 14 Mar 2012)
New Revision: 51058

Modified:
   grass/trunk/lib/python/core.py
Log:
pythonlib: introduce region_env()
	   add 3D support for region()


Modified: grass/trunk/lib/python/core.py
===================================================================
--- grass/trunk/lib/python/core.py	2012-03-14 20:50:34 UTC (rev 51057)
+++ grass/trunk/lib/python/core.py	2012-03-14 20:56:54 UTC (rev 51058)
@@ -580,10 +580,12 @@
     else:
 	return False
 
-def region():
+def region(region3d = False):
     """!Returns the output from running "g.region -g", as a
     dictionary. Example:
 
+    \param region3d True to get 3D region
+    
     \code
     >>> region = grass.region()
     >>> [region[key] for key in "nsew"]
@@ -594,12 +596,84 @@
 
     @return dictionary of region values
     """
-    s = read_command("g.region", flags='g')
+    flgs = 'g'
+    if region3d:
+        flgs += '3'
+    
+    s = read_command("g.region", flags = flgs)
     reg = parse_key_val(s, val_type = float)
-    for k in ['rows', 'cols']:
+    for k in ['rows',  'cols',  'cells',
+              'rows3', 'cols3', 'cells3', 'depths']:
+        if k not in reg:
+            continue
 	reg[k] = int(reg[k])
+    
     return reg
 
+def region_env(region3d = False,
+               **kwargs):
+    """!Returns region settings as a string which can used as
+    GRASS_REGION environmental variable.
+
+    If no 'kwargs' are given then the current region is used. Note
+    that this function doesn't modify the current region!
+
+    See also use_temp_region() for alternative method how to define
+    temporary region used for raster-based computation.
+
+    \param region3d True to get 3D region
+    \param kwargs g.region's parameters like 'rast', 'vect' or 'region'
+    \code
+    os.environ['GRASS_REGION'] = grass.region_env(region = 'detail')
+    grass.mapcalc('map = 1', overwrite = True)
+    os.environ.pop('GRASS_REGION')
+    \endcode
+
+    @return string with region values
+    """
+    # read proj/zone from WIND file
+    env = gisenv()
+    windfile = os.path.join (env['GISDBASE'], env['LOCATION_NAME'],
+                              env['MAPSET'], "WIND")
+    fd = open(windfile, "r")
+    grass_region = ''
+    for line in fd.readlines():
+        key, value = map(lambda x: x.strip(), line.split(":", 1))
+        if not kwargs or (kwargs and key in ('proj', 'zone')):
+            grass_region += '%s: %s;' % (key, value)
+    
+    if not kwargs: # return current region
+        return grass_region
+    
+    # read other values from `g.region -g`
+    flgs = 'ug'
+    if region3d:
+        flgs += '3'
+    
+    s = read_command('g.region', flags = flgs, **kwargs)
+    reg = parse_key_val(s)
+    
+    kwdata = [('north', 'n'),
+              ('south', 's'),
+              ('east',  'e'),
+              ('west',  'w'),
+              ('e-w resol', 'ewres'),
+              ('n-s resol', 'nsres'),
+              ('cols',  'cols'),
+              ('rows',  'rows')]
+    if region3d:
+        kwdata += [('e-w resol3', 'ewres3'),
+                   ('n-s resol3', 'nsres3'),
+                   ('t-b resol3', 'tbres'),
+                   ('cols3',      'cols3'),
+                   ('rows3',      'rows3'),
+                   ('depths',     'depths')]
+    
+    for wkey, rkey in kwdata:
+        grass_region += '%s: %s;' % (wkey, reg[rkey])
+    
+    return grass_region
+    
 def use_temp_region():
     """!Copies the current region to a temporary region with "g.region save=",
     then sets WIND_OVERRIDE to refer to that region. Installs an atexit



More information about the grass-commit mailing list