[R-sig-Geo] rgrass7 : Error in parseGRASS

Chris Reudenbach reudenbach at uni-marburg.de
Thu Nov 24 09:17:19 CET 2016


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
>



More information about the R-sig-Geo mailing list