rgrass7 : Error in parseGRASS
On Thu, 24 Nov 2016, Michael DELORME wrote:
That's great Chris, it works fine as is ! Thank you, I don't have to keep another GRASS install aside then.
Thanks for confirming this. I'll try to set up a test rig to allow initGRASS to set up the environment variables when using GRASS in OSGeo4W for a later release. Roger
I'm sure it will be helpful to other people also. Thanks again Le 24/11/2016 09:17, Chris Reudenbach a ?crit :
Michael,
Using a fresh OSGEO4W64 standard quick desktop installation (i.e.
installation of the default desktop GIS software packages with the
installer and using C:\OSGeo4W64 as path) I suggest the below solution.
You have to set all necessary eniromental and system variables
manually. I am not quit sure if I got them but actually it seems to
work for your question. As a conclusion I think your Python and all of
the rest is installed correct.
cheers Chris
############### librarys, data etc
---------------------------------------------
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 at grid@cellsize[1]
# georeference the meuse data
coordinates(meuse) <- ~x+y
proj4string(meuse) <- CRS("+init=epsg:28992")
# get projection, proj4 string and extent for GRASS
projection<-(strsplit(meuse at proj4string@projargs,split = " "))
proj4<- paste(projection[[1]][2:length(unlist(projection))], collapse
= ' ')
xmax<-meuse at bbox[3]
xmin<-meuse at bbox[1]
ymax<-meuse at bbox[4]
ymin<-meuse at 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"))
########### SETUP OSGEO4W enviroment settings manually
-------------------------
# setup the OSGEO4W environ manually
# assuming a osgeow4w default "deskop fastinstall
# using the default installation directory "C:\OSGeo4W64"
# set OSGE4W base directory
osgeo4w.root<-"C:\\OSGEO4~1"
Sys.setenv(OSGEO4W_ROOT=osgeo4w.root)
# define GISBASE
grass.gis.base<-paste0(osgeo4w.root,"\\apps\\grass\\grass-7.0.5")
Sys.setenv(GISBASE=grass.gis.base)
Sys.setenv(GRASS_PYTHON=paste0(Sys.getenv("OSGEO4W_ROOT"),"\\bin\\python.exe"))
Sys.setenv(PYTHONHOME=paste0(Sys.getenv("OSGEO4W_ROOT"),"\\apps\\Python27"))
Sys.setenv(PYTHONPATH=paste0(Sys.getenv("OSGEO4W_ROOT"),"\\apps\\grass\\grass-7.0.5\\etc\\python"))
Sys.setenv(GRASS_PROJSHARE=paste0(Sys.getenv("OSGEO4W_ROOT"),"\\share\\proj"))
Sys.setenv(PROJ_LIB=paste0(Sys.getenv("OSGEO4W_ROOT"),"\\share\\proj"))
Sys.setenv(GDAL_DATA=paste0(Sys.getenv("OSGEO4W_ROOT"),"\\share\\gdal"))
Sys.setenv(GEOTIFF_CSV=paste0(Sys.getenv("OSGEO4W_ROOT"),"\\share\\epsg_csv"))
Sys.setenv(FONTCONFIG_FILE=paste0(Sys.getenv("OSGEO4W_ROOT"),"\\etc\\fonts.conf"))
# call all OSGEO4W settings
system("C:/OSGeo4W64/bin/o-help.bat")
# create PATH variable
Sys.setenv(PATH=paste0(grass.gis.base,";",
"C:\\OSGEO4~1\\apps\\Python27\\lib\\site-packages\\numpy\\core",";",
"C:\\OSGeo4W64\\apps\\grass\\grass-7.0.5\\bin",";",
"C:\\OSGeo4W64\\apps\\grass\\grass-7.0.5\\lib",";",
"C:\\OSGeo4W64\\apps\\grass\\grass-7.0.5\\etc",";",
"C:\\OSGeo4W64\\apps\\grass\\grass-7.0.5\\etc\\python",";",
"C:\\OSGeo4W64\\apps\\Python27\\Scripts",";",
"C:\\OSGeo4W64\\bin",";",
"c:\\OSGeo4W64\\apps",";",
"C:\\OSGEO4~1\\apps\\saga",";",
paste0(Sys.getenv("WINDIR"),"/WBem"),";",
Sys.getenv("PATH")))
#################### start with GRASS setup
------------------------------------
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
---------------------------------------------
rgrass7::writeVECT(meuse,"meuse")
rgrass7::execGRASS("v.db.addcolumn", map = "meuse", columns = "area_m2
double
precision")
############# do other command line stuff
-------------------------------------
## call gdal
system("gdal_merge")
# call saga cli
system("saga_cmd")
Am 23.11.2016 um 07:38 schrieb Michael DELORME:
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 at 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 at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at 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 at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Roger Bivand Department of Economics, Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 91 00 e-mail: Roger.Bivand at nhh.no http://orcid.org/0000-0003-2392-6140 https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en http://depsy.org/person/434412