-
-
Save obrl-soil/d74f58b137970364458ad41270a1c8f9 to your computer and use it in GitHub Desktop.
# Source this file at the top of an R or Rmd file using rgrass7 together | |
# with GRASS installed via OSGeo4W (https://trac.osgeo.org/osgeo4w/) on a | |
# Windows machine. | |
# e.g. source(file.path(getwd(), 'rgrass7-setup-win-osgeo4w.R')) | |
# You can alternatively add the contents to a project-specific .Rprofile. | |
# Its better to set these variables in an R session rather than in System, | |
# especially if you have other GIS software like PostGIS installed, which has | |
# its own GDAL_DATA path. This is also the only solution for Windows users on | |
# accounts lacking admin rights. | |
# Note that if you call `library(sf)` after setting these variables, GDAL_DATA | |
# will be overwritten! | |
# These paths are current to 2022-01-25 and may change in future. If you get | |
# stuck, open a question on gis.stackexchange or r-sig-geo. I'm not resourced | |
# to respond to one-on-one contacts on this topic. | |
# from /bin/o4w_env.bat: | |
Sys.setenv('OSGEO4W_ROOT' = file.path('C:', 'OSGeo4W')) | |
# NB Change the above if you installed OSGeo4W in a non-standard location. | |
# from %OSGEO4W_ROOT%/etc/ini/gdal.bat | |
Sys.setenv('GDAL_DATA' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'share', 'gdal')) | |
Sys.setenv('GDAL_DRIVER_PATH' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'bin', 'gdalplugins')) | |
# from %OSGEO4W_ROOT%/etc/ini/libjpeg.bat (optional?) | |
Sys.setenv('JPEGMEM' = 1000000) | |
# from %OSGEO4W_ROOT%/etc/ini/openssl.bat (optional?) | |
Sys.setenv('OPENSSL_ENGINES' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'lib', 'engines-1_1')) | |
# from %OSGEO4W_ROOT%/etc/ini/proj.bat | |
Sys.setenv('PROJ_LIB' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'share', 'proj')) | |
# from %OSGEO4W_ROOT%/etc/ini/python3.bat | |
Sys.setenv('PYTHONHOME' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'apps', 'Python39')) | |
Sys.setenv('PYTHONUTF8' = 1) | |
# from %OSGEO4W_ROOT%/etc/ini/qt5.bat (optional?) | |
Sys.setenv('QT_PLUGIN_PATH' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'apps', 'Qt5', 'plugins')) | |
Sys.setenv('O4W_QT_PREFIX' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'apps', 'Qt5')) | |
Sys.setenv('O4W_QT_BINARIES' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'apps', 'Qt5', 'bin')) | |
Sys.setenv('O4W_QT_PLUGINS' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'apps', 'Qt5', 'plugins')) | |
Sys.setenv('O4W_QT_LIBRARIES' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'apps', 'Qt5', 'lib')) | |
Sys.setenv('O4W_QT_TRANSLATIONS' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'apps', 'Qt5', 'translations')) | |
Sys.setenv('O4W_QT_HEADERS' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'apps', 'Qt5', 'include')) | |
Sys.setenv('O4W_QT_DOC' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'apps', 'Qt5', 'doc')) | |
# from%OSGEO4W_ROOT%/apps/grass/grass78/etc/env.bat | |
Sys.setenv('GISBASE' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'apps', 'grass', 'grass78')) | |
Sys.setenv('GRASS_PYTHON' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'bin', 'python3.exe')) | |
Sys.setenv('PYTHONPATH' = | |
file.path(Sys.getenv('GISBASE'), 'etc', 'python')) | |
Sys.setenv('GRASS_PROJSHARE' = | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'share', 'proj')) | |
Sys.setenv('FONTCONFIG_FILE'= | |
file.path(Sys.getenv("GISBASE"), 'etc', 'fonts.conf')) | |
# NB the appropriate path for the next two variables may vary depending on your | |
# Windows version and your account permissions. If in doubt, open GRASS-GUI, | |
# define a database, open a new location, exit, and then search your user | |
# directory for a folder called 'GRASS7'. Edit the paths below to match. This | |
# should only be necessary once after a clean installation of GRASS, or if you | |
# refresh your user profile. | |
# If GISRC is defined but no rc file exists at the specified location, | |
# `library('rgrass7')` will fail with an error about XML. Either skip setting | |
# this variable, or manually initialise GRASS as described above before | |
# proceeding. | |
if(!file.exists(file.path(Sys.getenv('USERPROFILE'), 'AppData', 'Roaming', | |
'GRASS7', 'rc'))) { | |
message('Missing rc file in expected location.') | |
} else { | |
Sys.setenv('GISRC' = | |
file.path(Sys.getenv('USERPROFILE'), 'AppData', 'Roaming', | |
'GRASS7', 'rc')) | |
} | |
Sys.setenv('GRASS_ADDON_BASE' = | |
file.path(Sys.getenv('USERPROFILE'), 'AppData', 'Roaming', | |
'GRASS7', 'addons')) | |
# lastly, | |
Sys.setenv('PATH' = | |
paste(file.path(Sys.getenv('GISBASE'), 'lib'), | |
file.path(Sys.getenv('GISBASE'), 'bin'), | |
Sys.getenv('GRASS_ADDON_BASE'), | |
Sys.getenv('O4W_QT_BINARIES'), | |
file.path(Sys.getenv('PYTHONHOME'), 'Scripts'), # python3.bat | |
file.path(Sys.getenv('OSGEO4W_ROOT'), 'bin'), #o4w_env.bat , | |
Sys.getenv("PATH"), | |
sep = .Platform$path.sep)) | |
# Be aware that if you have other Python or GRASS installs on your PATH already, | |
# you might need to alter the relative position of `Sys.getenv("PATH")` above. |
Thanks for the response. Unfortunately, the issue DOES prevent me from running my execGRASS()
calls. Well, they run but they give empty result. I posted the issue at the rgrass
gitHub page and @rsbivand
(Roger Bivand) helped me diagnose that the root cause of the problem is the fact that WinGRASS loads a slightly old proj.db
version that isn't compatible with the version loaded by terra
. There is no solution suggested but I think I will continue playing with combinations of old versions of rgrass
, WinGRASS
, and terra
and see if I can find a combo that plays nicely together.
Ah interesting - I haven't had any problems myself lately (running a relative elevation model workflow, YMMV), but from the install path you posted above it looks like you're using a standalone installation of GRASS rather than the OSGeo4W version. GRASS 8.2 is available through the OSGeo4W package manager - use the advanced option in the installer to choose it.
Yes @obrl-soil, it seems like the OSGeo4W
version of GRASS is updated more constantly than the Windows standalone installer. Here are more details on that. I will try that one and see if it solves my problem.
Hi @fgashakamba, should all pretty much work the same. The error you're seeing is related to a different unsolved bug, see rsbivand/rgrass#33 and OSGeo/grass#1955. No solve yet unfortunately, but it won't prevent most
execGRASS()
calls from running.