[R-sig-Geo] rgrass7 : Error in parseGRASS
Roger Bivand
Roger.Bivand at nhh.no
Wed Nov 23 10:12:09 CET 2016
Chris,
Thanks for this. Could you please explain how you use R in the OSGeo4W64
context? Where are you starting R and how does it find the OSGeo4W
components that are not on default PATH settings? In order to correct
rgrass7, I need to know how to start R under OSGeo4W64 outside GRASS.
Roger
On Wed, 23 Nov 2016, Chris Reudenbach wrote:
> 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 at 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 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@@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 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
>
--
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
More information about the R-sig-Geo
mailing list