PyWPS and GRASS GIS¶
PyWPS was originally written with support for GRASS GIS. The processes can be executed within a temporary created GRASS Location or within an existing GRASS Location, within temporary created Mapset. If you are not familiar with this concepts, please review the GRASS documentation.
First you have to configure PyWPS configuration file, as described in Configuration.
Allowing Process to be executed in the GRASS environment¶
When you are initializing a new process (see process-initialization),
you can add a
pywps.Process.WPSProcess.grassLocation attribute to it.
The attribute can have the following values:
GRASS Location is not created, GRASS environment is not started (default):WPSProcess.__init__(self, identifier = "foo)
Temporary GRASS Location is created in XY coordinate system. .. note:: In the future, GRASS Location will probably have a
coordinate system token from the input raster or vector file.:
- WPSProcess.__init__(self, identifier = “foo”,
- …, grassLocation = True)
Name of the GRASS Location within the configured grassdbase. If the name starts with “/”, the full path to the location is taken, without any other configuration.:WPSProcess.__init__(self, identifier = "foo", ... grassLocation = "spearfish60")
or:WPSProcess.__init__(self, identifier = "foo", ... grassLocation = "/foo/bar/grassdata/spearfish60")
Running GRASS modules from PyWPS¶
You have two options: either run GRASS modules as you would do in shell script (running the modules directly) or access the GRASS-python interface.
Running GRASS command line modules¶
pywps.Process.WPSProcess.execute() method is executed, you
can use the
pywps.Process.WPSProcess.cmd() method for calling GRASS
Using GRASS-Python interface¶
Since GRASS 6.4, Python bindings are supported. There are both a ctypes
interface and GRASS Modules-Python interface. They are both described in
the GRASS Wiki . There are
grass.mapcalc() and other useful methods.
GRASS-Python interface example¶
from pywps.Process import WPSProcess process = WPSProcess(identifier="grassprocess", title="GRASS Process") def execute(): from grass.script import core as grass ret = grass.run_command("d.his", h_map = "drap_map", i_map = "relief_map", brighten = 0) return process.execute = execute