[GRASS-dev] grass.script.array.read: reading multiple rasters

Glynn Clements glynn at gclements.plus.com
Thu Jul 31 20:02:59 PDT 2014


Paulo van Breugel wrote:

> To read in a raster with GRASS Python Scripting Library, I can use
> 
> ref = garray.array()
> ref.read('mymap')
> 
> But is it also possible to read in multiple raster layers at once? 
> Something like:
> 
> ref = garray.array()
> ref.read(('map1','map2'))

At present, no.

The grass.script.array module's "array" class is a fairly simple
subclass of numpy.memmap, which stores the data in a memory-mapped
file).

The only extensions provided by the subclass are that the constructor
automatically sets the array size from the current region, and the
addition of read() and write() methods which use r.out.bin/r.in.bin to
export/import GRASS raster maps to/from the mapped file.

> If not, what would be the best way to get an array with data from 
> multiple raster layers.. using a loop?

Yes.

You can create a 3-dimensional array of the desired size, then read
the individual maps into the layers with e.g.

	import numpy as np
	import grass.script.array as garray

	data = None
	layer = garray.array()

	for i, map in enumerate(maps):
	    layer.read(map)
	    if data is None:
	        s = len(maps)
	        r, c = layer.shape
	        data = np.empty((s, r, c), dtype=np.double)
	    data[i,:,:] = layer

	del layer

-- 
Glynn Clements <glynn at gclements.plus.com>


More information about the grass-dev mailing list