[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