使用rgrass包对接R与GRASS GIS时遇g.proj.exe执行错误
Windows下rgrass对接GRASS GIS 8.2的
g.proj.exe -w警告排查与解决 问题说明
在Windows环境使用rgrass包对接GRASS GIS 8.2时,执行初始化代码:
initGRASS(gisBase = "C:/Program Files/GRASS GIS 8.2", home = tempdir())
触发警告:
Warning message: In system(syscmd, intern = intern, ignore.stderr = ignore.stderr, : running command 'g.proj.exe -w' had status 1
已单独安装PROJ 9.2并设置PROJ_DATA环境变量为C:\OSGeo4W\share\proj,但问题未解决;旧版rgrass7相关讨论无参考价值,新版rgrass文档匮乏。
可能原因及解决方法
1. GRASS内置PROJ与单独安装版本冲突
GRASS GIS 8.2自带适配版本的PROJ,单独安装的PROJ 9.2可能和内置版本存在路径或版本冲突,导致g.proj.exe无法正确读取投影数据。
- 解决:临时将
PROJ_DATA环境变量改为指向GRASS内置的PROJ数据目录,路径通常为C:/Program Files/GRASS GIS 8.2/share/proj,重启R会话后重新测试initGRASS。
2. GRASS环境变量未完整加载
直接通过R调用GRASS工具时,可能未加载GRASS启动时自动配置的完整环境变量,导致g.proj.exe找不到依赖库或数据。
- 解决:
- 先打开GRASS GIS 8.2自带的命令行(GUI启动后的终端窗口),在该终端中启动R,再执行
initGRASS代码; - 或手动在R中添加GRASS环境变量:
执行后再运行Sys.setenv(PATH = paste("C:/Program Files/GRASS GIS 8.2/bin", Sys.getenv("PATH"), sep = ";")) Sys.setenv(PATH = paste("C:/Program Files/GRASS GIS 8.2/lib", Sys.getenv("PATH"), sep = ";")) Sys.setenv(GISDBASE = "C:/GRASS_GIS_DATABASE") # 自定义GRASS数据库目录initGRASS。
- 先打开GRASS GIS 8.2自带的命令行(GUI启动后的终端窗口),在该终端中启动R,再执行
3. initGRASS参数配置不完整
新版rgrass的initGRASS需要更完整的参数,仅指定gisBase和home可能无法完成初始化。
- 解决:
- 若已有GRASS位置(通过GUI创建),指定完整路径参数:
initGRASS(gisBase = "C:/Program Files/GRASS GIS 8.2", home = tempdir(), gisDbase = "C:/GRASS_GIS_DATABASE", location = "my_location", mapset = "PERMANENT") - 若无需现有位置,强制初始化临时投影:
initGRASS(gisBase = "C:/Program Files/GRASS GIS 8.2", home = tempdir(), override = TRUE, proj4 = "+proj=longlat +datum=WGS84")
- 若已有GRASS位置(通过GUI创建),指定完整路径参数:
4. 临时目录权限不足
tempdir()可能存在读写权限限制,导致GRASS无法写入临时文件,触发g.proj.exe执行失败。
- 解决:将
home参数替换为自定义的、有读写权限的本地目录,比如:initGRASS(gisBase = "C:/Program Files/GRASS GIS 8.2", home = "C:/GRASS_TEMP") # 需提前创建该目录
内容的提问来源于stack exchange,提问作者Faustin Gashakamba
相关产品推荐
相关产品推荐

