[GRASS-dev] G__getenv return different results from ctypes and from GRASS modules

Nikos Alexandris nik at nikosalexandris.net
Fri May 31 02:33:18 PDT 2013


Pietro wrote:

> > Why the ctypes version return 'PERMANENT' instead of 'user1'?

Glynn Clements wrote:

> The $GISRC file is read the first time that an environment lookup is
> made. There is no way to force it to be re-read.

This means that I can't use instructions like

    # retrieve existing Spectral bands
    landsat_elements['Spectral Bands'] = \
    Mapset().glist('rast', pattern = 'B[123457]')

    # alternative naming...
    if not landsat_elements['Spectral Bands']:
        landsat_elements['Spectral Bands'] = \
        Mapset().glist('rast', pattern = 'B[123457]0')
        # no results?
        if not landsat_elements['Spectral Bands']:
            print "No Spectral bands named after a B? or B?0 pattern found!"

in a function (pasted below) which I call from within a "for" loop to go 
through Mapsets that potentially contain raster maps named differently?  I 
need to use another way to feed raster maps in a dictionary, right?  I need to 
change the way raster maps are fed in a dictionary, i.e. use something like

    data['Spectral Bands'] = list(zip(*grass.mlist_pairs('rast', 'B[123457]'))
[0])

?

And then, what will be the role of pygrass' Mapset() function?

Thank you (Pietro & Glyyn),

Nikos


The following function is called from within a for loop over different 
Mapsets:

#############################################################################

# List & Resolution of Landsat Rasters, Controllers for expected names ======
def retrieve_landsat_rasters(verbose = False):
    
    landsat_elements = dict()

    # retrieve existing Spectral bands --------------------------------------
    landsat_elements['Spectral Bands'] = \
    Mapset().glist('rast', pattern = 'B[123457]')

    # alternative naming...
    if not landsat_elements['Spectral Bands']:
        landsat_elements['Spectral Bands'] = \
        Mapset().glist('rast', pattern = 'B[123457]0')
        # no results?
        if not landsat_elements['Spectral Bands']:
            print "No Spectral bands named after a B? or B?0 pattern found!"
    # resolution of Spectral bands
    landsat_elements['Resolution Spectral'] = \
    int(grass.raster_info(landsat_elements['Spectral Bands'][0])['nsres'])

    # retrieve existing Temperature channels --------------------------------
    landsat_elements['Temperature Channels'] = \
    Mapset().glist('rast', pattern = 'B6[12]')
    # no results?
    if not landsat_elements['Temperature Channels']:
        print "There are no Landsat Temperature channels named B61, B62!"
    # temperature channels (resolution = 30 or 60m)
    landsat_elements['Resolution Temperature'] = \
    int(grass.raster_info(landsat_elements['Temperature Channels'][0])
['nsres'])

    # retrieve existing Panchromatic channels -------------------------------
    landsat_elements['Panchromatic Channel'] = \
    Mapset().glist('rast', pattern = 'B8')
    # alternative naming
    if not landsat_elements['Panchromatic Channel']:
        landsat_elements['Panchromatic Channel'] = \
        Mapset().glist('rast', pattern = 'B80')
        # no results?
        if not landsat_elements['Panchromatic Channel']:
            print "There is no Landsat Panchromatic channel named B8 or B80!"
    # panchromatic channels (resolution = 15m)
    landsat_elements['Resolution Panchromatic'] = \
    int(grass.raster_info(landsat_elements['Panchromatic Channel'])['nsres'])
    
    if verbose:
        for key in sorted(landsat_elements.keys()):
            print "%s: %r" % (key, landsat_elements[key])
    return landsat_elements
    
#############################################################################


More information about the grass-dev mailing list