Michael,
using GRASS from R is a bit cumbersome. GRASS (and this is for sure one
of it strength ) is extremely rigid with projections etc. Due to this
you should setup a correct structure. I use a setup that is similar to
the below snippet.
cheers Chris
library(rgrass7)
library(sp)
# setup a temp workingdir
working.dir<- "~/tmp/"
# get meuse data
data(meuse)
data(meuse.grid)
# georeference the meuse grid data
coordinates(meuse.grid) <- ~x+y
proj4string(meuse.grid) <- CRS("+init=epsg:28992")
gridded(meuse.grid) <- TRUE
# get a first cellsize/pixel resolution for GRASS
resolution <- meuse.grid@grid@cellsize[1]
# georeference the meuse data
coordinates(meuse) <- ~x+y
proj4string(meuse) <- as.character(CRS("+init=epsg:28992"))
# get projection, proj4 string and extent for GRASS
projection<-(strsplit(meuse@proj4string@projargs,split = " "))
proj4<- paste(projection[[1]][2:length(unlist(projection))], collapse = ' ')
xmax<-meuse@bbox[3]
xmin<-meuse@bbox[1]
ymax<-meuse@bbox[4]
ymin<-meuse@@bbox[2]
# create and set working directory
if (!file.exists(file.path(working.dir,"run"))){
dir.create(file.path(working.dir,"run"),recursive = TRUE)
}
setwd(file.path( working.dir,"run"))
############ set up GRASS RUNTIME environment
# define the GRASS executable path
if(Sys.info()["sysname"] == "Windows"){
grass.gis.base<-'C:/OSGeo4W64/apps/grass/grass-7.0.5'
}else {
grass.gis.base<-'/usr/lib/grass72'
}
# set path for optional GRASS addons
Sys.setenv(GRASS_ADDON_PATH="~/.grass7/addons")
# create the TEMPORARY GRASS location
rgrass7::initGRASS(gisBase=grass.gis.base,
home=tempdir(),
mapset='PERMANENT',
override=TRUE
)
# assign GRASS projection according to data set
rgrass7::execGRASS('g.proj',
flags=c('c','quiet'),
proj4=proj4
)
# assign GRASS extent and resolution
rgrass7::execGRASS('g.region',
flags=c('quiet'),
n=as.character(ymax),
s=as.character(ymin),
e=as.character(xmax),
w=as.character(xmin),
res=as.character(resolution)
)
############# now do GRASS STUFF
writeVECT(meuse,"meuse")
execGRASS("v.db.addcolumn", map = "meuse", columns = "area_m2 double
precision")
On 23.11.2016 07:38, Michael DELORME wrote:
Thanks for your insight.
I'll use a stand-alone GRASS install.
Cordially
Le 22/11/2016 15:13, Roger Bivand a écrit :
On Tue, 22 Nov 2016, Michael DELORME wrote:
Thanks for investigating.
I'll try a standalone version of GRASS if needed.
Here is the traceback
traceback()
4: stop(paste(cmd, "not parsed"))
3: parseGRASS(cmd, legacyExec = legacyExec)
2: doGRASS(cmd, flags = flags, ..., parameters = parameters, echoCmd =
echoCmd, legacyExec = legacyExec)
1: execGRASS("v.db.addcolumn", map = "meuse", columns = "area_m2 double
precision")
My C:\OSGeo4W64\apps\grass\grass-7.0.5\bin lists *.exe or *.bat and
indeed the *.bat command are those which don't work (r.mask.bat,
v.db.addcolumn.bat,...). The batch calls Python scripts ; for example
v.db.addcolumn.bat is :
@"%GRASS_PYTHON%" "%GISBASE%/scripts/v.db.addcolumn.py" %*
So I guess something must be wrong in my Python installation... (it
works however from within a GRASS shell)
No, the logic for Windows and initGRASS has only ever been tested with
stand-alone GRASS. I would guess that in OSGeo4W the path variables
are wrong. I cannot even find out how to run initGRASS in R but
outside the OSGeo4W shell (doesn't find iconv.dll) or inside the
OSGeo4W shell (cannot create a temporary GRASS location). Unless you
or others really need OSGeo4W, I suggest asking others to implement
that - very bulky and fragile.
Roger
Cordially
Le 22/11/2016 14:30, Roger Bivand a écrit :
On Tue, 22 Nov 2016, Michael DELORME wrote:
Thanks for replying
Here is a reproducible example (change your GRASS directory of
course) :
library(rgrass7)
library(sp)
initGRASS("C:/OSGeo4W64/apps/grass/grass-7.0.5", home = tempdir(),
override = TRUE)
data(meuse)
coordinates(meuse) <- ~x+y
writeVECT(meuse, "meuse")
execGRASS("v.db.addcolumn", map = "meuse", columns = "area_m2 double
precision")
This appears to run correctly on Windows 7 with GRASS 7.0.5 Windows
stand-alone. Do you need to use OSGeo4W - the internal logic used for
finding out where the different versions keep their executables and
batch files varies?
What does traceback() say after the error? The error comes from
parseGRASS("v.db.addcolumn") - the XML error comes from not being able
to read the output of v.db.addcolumn<.ext> --interface-description
where <.ext> may be .exe or .bat I think.
Roger
I get :
Error : XML content does not seem to be XML: 'The specified path
was not
found.'
In addition: Warning message:
running command 'v.db.addcolumn.bat --interface-description' had
status 1
Error in parseGRASS(cmd, legacyExec = legacyExec) :
v.db.addcolumn not parsed
Other execGRASS commands (like r.neighbors, r.mapcalc,..) work fine,
but some other (r.mask) fail with a similar XML error.
All commands work fine when used from the GRASS shell...
What is this XML error ?
Thanks
Le 22/11/2016 09:34, Roger Bivand a écrit :
On Tue, 22 Nov 2016, Michael DELORME wrote:
Dear list,
Using rgrass7 on Windows7 with GRASS 7.0.5 (OSGeo distribution),
I get
the following error :
Please always try to provide a reproducible example using a standard
data set. In addition, the output of traceback() following the error
would be helpful. Are you running R inside GRASS, or using R to
initiate GRASS?
Consider using the grass-stats list:
https://lists.osgeo.org/mailman/listinfo/grass-stats
as it is more likely to yield results, but there also provide an
example that anyone can reproduce. The example should avoid loading
other packages, and should be run from the R console (not, say,
RStudio).
Roger
execGRASS("v.db.addcolumn", map = "result_v", columns = "area_m2
double precision")
Error : XML content does not seem to be XML: 'Le chemin d'accés
spécifié est introuvable.' In addition: Warning message: running
command 'v.db.addcolumn.bat --interface-description' had status 1
Error in parseGRASS(cmd, legacyExec = legacyExec) :
v.db.addcolumn not parsed
and a similar one for r.mask :
execGRASS("r.mask", raster = "map")
Error : XML content does not seem to be XML: 'Le chemin d'accés
spécifié est introuvable.'
In addition: Warning message:
running command 'r.mask.bat --interface-description' had status 1
Error in parseGRASS(cmd, legacyExec = legacyExec) : r.mask not
parsed
whereas most other execGRASS command I tried work as expected.
Any idea ?
Thanks in advance
Here is my session info :
sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252
LC_MONETARY=French_France.1252 LC_NUMERIC=C [5]
LC_TIME=French_France.1252
attached base packages:
[1] parallel stats graphics grDevices utils datasets
methods base
other attached packages: [1] rgrass7_0.1-9 XML_3.98-1.4 beepr_1.2
raster_2.5-8 sp_1.2-3 RPostgreSQL_0.4-1 DBI_0.5-1
loaded via a namespace (and not attached): [1] magrittr_1.5
tools_3.3.1 audio_0.1-5 Rcpp_0.12.7 stringi_1.1.2 grid_3.3.1
stringr_1.1.0 lattice_0.20-34 [9] fortunes_1.5-3
[[alternative HTML version deleted]]
_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
--
*Michaël DELORME*
Administrateur de données, chargé de projet en géomatique
Service régional de l'information statistique, économique et
territoriale
Direction régionale de l'alimentation, de l'agriculture et de la forêt
Auvergne-Rhône-Alpes
Site de Lyon
165 rue Garibaldi – BP 3202 – 69401 LYON cedex 03
04 78 63 34 21
Pour écrire au service :
DRAAF Auvergne-Rhône-Alpes – SRISET
16B rue Aimé Rudel – BP 45 – 63370 LEMPDES
http://www.draaf.auvergne-rhone-alpes.agriculture.gouv.fr/
[[alternative HTML version deleted]]
_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-geo