execGRASS.Rd
The functions provide an interface to GRASS commands run through system
, based on the values returned by the --interface description
flag using XML parsing. If required parameters are omitted, and have declared defaults, the defaults will be used.
execGRASS(cmd, flags = NULL, ..., parameters = NULL, intern = NULL,
ignore.stderr = NULL, Sys_ignore.stdout=FALSE, Sys_wait=TRUE,
Sys_input=NULL, Sys_show.output.on.console=TRUE, Sys_minimized=FALSE,
Sys_invisible=TRUE, echoCmd=NULL, redirect=FALSE, legacyExec=NULL)
stringexecGRASS(string, intern = NULL,
ignore.stderr = NULL, Sys_ignore.stdout=FALSE, Sys_wait=TRUE,
Sys_input=NULL, Sys_show.output.on.console=TRUE, Sys_minimized=FALSE,
Sys_invisible=TRUE, echoCmd=NULL, redirect=FALSE, legacyExec=NULL)
doGRASS(cmd, flags = NULL, ..., parameters = NULL, echoCmd=NULL,
legacyExec=NULL)
parseGRASS(cmd, legacyExec=NULL)
# S3 method for GRASS_interface_desc
print(x, ...)
getXMLencoding()
setXMLencoding(enc)
GRASS command name
character vector of GRASS command flags
for execGRASS
and doGRASS
, GRASS module parameters given as R named arguments directly. For the print
method, other arguments to print method. The storage modes of values passed must match thos required in GRASS, so a single GRASS string must be a character vector of length 1, a single GRASS integer must be an integer vector of length 1 (may be an integer constant such as 10L), and a single GRASS float must be a numeric vector of length 1. For multiple values, use vectors of suitable length
list of GRASS command parameters, used if GRASS parameters are not given as R arguments directly; the two methods for passing GRASS parameters may not be mixed. The storage modes of values passed must match thos required in GRASS, so a single GRASS string must be a character vector of length 1, a single GRASS integer must be an integer vector of length 1 (may be an integer constant such as 10L), and a single GRASS float must be a numeric vector of length 1. For multiple values, use vectors of suitable length
a string representing one full GRASS statement, using shell syntax: command name, optionally followed by flags and parameters, all separated by whitespaces. Parameters follow the key=value format; if 'value' contains spaces, then 'value' must be quoted
default NULL, in which case set internally from get.useInternOption
; a logical (not 'NA') which indicates whether to make the output of the command an R object. Not available unless 'popen' is supported on the platform
default NULL, taking the value set by set.ignore.stderrOption
, a logical indicating whether error messages written to 'stderr' should be ignored
pass extra arguments to system
pass extra arguments to system
on Windows systems only
default NULL, taking the logical value set by set.echoCmdOption
, print GRASS command to be executed to console
default FALSE
, if TRUE
, add “2>&1” to the command string and set intern
to TRUE
; only used in legacy mode
default NULL, taking the logical value set by set.legacyExecOption
which is initialised to FALSE
on “unix” platforms and TRUE
otherwise. If TRUE
, use system
, if FALSE
use system2
and divert stderr to temporary file to record error messages and warnings from GRASS modules
object to be printed
character string to replace UTF-8 in header of XML data generated by GRASS module --interface-description output when the internationalised messages are not in UTF-8 (known to apply to French, which is in latin1)
parseGRASS
checks to see whether the GRASS command has been parsed already and cached in this session; if not, it reads the interface description, parses it and caches it for future use. doGRASS
assembles a proposed GRASS command with flags and parameters as a string, wrapping parseGRASS
, and execGRASS
is a wrapper for doGRASS
, running the command through system
(from 0.7-4, the ...
argument is not used for passing extra arguments for system
). The command string is termed proposed, because not all of the particular needs of commands are provided by the interface description, and no check is made for the existence of input objects. Support for multiple parameter values added with help from Patrick Caldon. Support for defaults and for direct use of GRASS parameters instead of a parameter list suggested by Rainer Krug.
stringexecGRASS
is a wrapper around execGRASS
, and accepts a single shell statement as a string (following GRASS's command syntax).
parseGRASS
returns a GRASS_interface_desc
object, doGRASS
returns a character string with a proposed GRASS command - the expanded command name is returned as an attribute, and execGRASS
and stringexecGRASS
return what system
or system2
return, particularly depending on the intern
argument when the character strings output by GRASS modules are returned.
If intern
is FALSE
, system
returns the module exit code, while system2
returns the module exit code with “resOut” and “resErr” attributes.
If any package command fails with a UTF-8 error from the XML package, try using setXMLencoding
to work around the problem that GRASS modules declare --interface-description output as UTF-8 without ensuring that it is (French is of 6.4.0 RC5 latin1).
Sys.setenv("_SP_EVOLUTION_STATUS_"="2")
run <- FALSE
if (nchar(Sys.getenv("GISRC")) > 0 &&
read.dcf(Sys.getenv("GISRC"))[1,"LOCATION_NAME"] == "nc_basic_spm_grass7") run <- TRUE
oechoCmd <- get.echoCmdOption()
set.echoCmdOption(TRUE)
#> [1] FALSE
if (run) {
print(parseGRASS("r.slope.aspect"))
}
#> Command: r.slope.aspect
#> Description: Generates raster maps of slope, aspect, curvatures and partial derivatives from an elevation raster map. Aspect is calculated counterclockwise from east.
#> Keywords: raster, terrain, aspect, slope, curvature, parallel
#> Parameters:
#> name: elevation, type: string, required: yes, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name of input elevation raster map]
#> name: slope, type: string, required: no, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name for output slope raster map]
#> name: aspect, type: string, required: no, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name for output aspect raster map]
#> name: format, type: string, required: no, multiple: no
#> default: degrees
#> [Format for reporting the slope]
#> name: precision, type: string, required: no, multiple: no
#> default: FCELL
#> [Storage type for resultant raster map]
#> name: pcurvature, type: string, required: no, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name for output profile curvature raster map]
#> name: tcurvature, type: string, required: no, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name for output tangential curvature raster map]
#> name: dx, type: string, required: no, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name for output first order partial derivative dx (E-W slope) raster map]
#> name: dy, type: string, required: no, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name for output first order partial derivative dy (N-S slope) raster map]
#> name: dxx, type: string, required: no, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name for output second order partial derivative dxx raster map]
#> name: dyy, type: string, required: no, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name for output second order partial derivative dyy raster map]
#> name: dxy, type: string, required: no, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name for output second order partial derivative dxy raster map]
#> name: zscale, type: float, required: no, multiple: no
#> default: 1.0
#> [Multiplicative factor to convert elevation units to horizontal units]
#> name: min_slope, type: float, required: no, multiple: no
#> default: 0.0
#> [Minimum slope value (in percent) for which aspect is computed]
#> name: nprocs, type: integer, required: no, multiple: no
#> default: 1
#> [Number of threads for parallel computing]
#> name: memory, type: integer, required: no, multiple: no
#> default: 300
#> keydesc: memory in MB, keydesc_count: 1
#> [Cache size for raster rows]
#> Flags:
#> name: a [Do not align the current region to the raster elevation map] {FALSE}
#> name: e [Compute output at edges and near NULL values] {FALSE}
#> name: n [Default: degrees counter-clockwise from East, with flat = 0] {FALSE}
#> name: overwrite [Allow output files to overwrite existing files] {FALSE}
#> name: help [Print usage summary] {FALSE}
#> name: verbose [Verbose module output] {FALSE}
#> name: quiet [Quiet module output] {FALSE}
if (run) {
doGRASS("r.slope.aspect", flags=c("overwrite"),
elevation="elevation.dem", slope="slope", aspect="aspect")
}
#> GRASS command: r.slope.aspect --overwrite elevation=elevation.dem slope=slope aspect=aspect
#> [1] "r.slope.aspect --overwrite elevation=elevation.dem slope=slope aspect=aspect"
#> attr(,"cmd")
#> [1] "r.slope.aspect"
if (run) {
pars <- list(elevation="elevation", slope="slope", aspect="aspect")
doGRASS("r.slope.aspect", flags=c("overwrite"), parameters=pars)
}
#> GRASS command: r.slope.aspect --overwrite elevation=elevation slope=slope aspect=aspect
#> [1] "r.slope.aspect --overwrite elevation=elevation slope=slope aspect=aspect"
#> attr(,"cmd")
#> [1] "r.slope.aspect"
if (run) {
print(parseGRASS("r.buffer"))
}
#> Command: r.buffer
#> Description: Creates a raster map showing buffer zones surrounding cells that contain non-NULL category values.
#> Keywords: raster, buffer
#> Parameters:
#> name: input, type: string, required: yes, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name of input raster map]
#> name: output, type: string, required: yes, multiple: no
#> keydesc: name, keydesc_count: 1
#> [Name for output raster map]
#> name: distances, type: float, required: yes, multiple: yes
#> [Distance zone(s)]
#> name: units, type: string, required: no, multiple: no
#> default: meters
#> [Units of distance]
#> Flags:
#> name: z [Ignore zero (0) data cells instead of NULL cells] {FALSE}
#> name: overwrite [Allow output files to overwrite existing files] {FALSE}
#> name: help [Print usage summary] {FALSE}
#> name: verbose [Verbose module output] {FALSE}
#> name: quiet [Quiet module output] {FALSE}
if (run) {
doGRASS("r.buffer", flags=c("overwrite"), input="schools", output="bmap",
distances=seq(1000,15000,1000))
}
#> GRASS command: r.buffer --overwrite input=schools output=bmap distances=1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,13000,14000,15000
#> [1] "r.buffer --overwrite input=schools output=bmap distances=1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,13000,14000,15000"
#> attr(,"cmd")
#> [1] "r.buffer"
if (run) {
pars <- list(input="schools", output="bmap", distances=seq(1000,15000,1000))
doGRASS("r.buffer", flags=c("overwrite"), parameters=pars)
}
#> GRASS command: r.buffer --overwrite input=schools output=bmap distances=1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,13000,14000,15000
#> [1] "r.buffer --overwrite input=schools output=bmap distances=1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,13000,14000,15000"
#> attr(,"cmd")
#> [1] "r.buffer"
if (run) {
set.echoCmdOption(oechoCmd)
try(res <- execGRASS("r.stats", input = "fire_blocksgg", # no such file
flags = c("C", "n")), silent=FALSE)
}
#> Error in execGRASS("r.stats", input = "fire_blocksgg", flags = c("C", :
#> The command:
#> r.stats -C -n input=fire_blocksgg
#> produced an error (1) during execution:
#> ERROR: Raster map <fire_blocksgg> not found
if (run) {
res <- execGRASS("r.stats", input = "fire_blocksgg", flags = c("C", "n"),
legacyExec=TRUE)
print(res)
}
#> [1] 1
if (run) {
if (res != 0) {
resERR <- execGRASS("r.stats", input = "fire_blocksgg",
flags = c("C", "n"), redirect=TRUE, legacyExec=TRUE)
print(resERR)
}
}
#> Warning: running command 'r.stats -C -n input=fire_blocksgg 2>&1' had status 1
#> [1] "ERROR: Raster map <fire_blocksgg> not found"
#> attr(,"status")
#> [1] 1
if (run) {
res <- stringexecGRASS("r.stats -p -l input=geology", intern=TRUE)
print(res)
}
#> [1] "217 CZfg 0.03%" "262 CZlg 0.01%" "270 CZig 0.03%" "405 CZbg 0.01%"
#> [5] "583 CZve 0.00%" "720 CZam 0.00%" "766 CZg 0.00%" "862 CZam 0.00%"
#> [9] "910 CZbg 0.00%" "921 Km 0.00%" "946 CZam 0.00%" "* no data 99.92%"
if (run) {
stringexecGRASS(paste("r.random.cells --overwrite --quiet output=samples",
"distance=1000 ncells=100 seed=1"))
}
if (run) {
execGRASS("r.random.cells", flags=c("overwrite", "quiet"), output="samples", distance=1000,
ncells=100L, seed=1L)
}