Integrating R with QGIS

Establishes an interface between R and 'QGIS', i.e. it allows the user to access 'QGIS' functionalities from the R console. It achieves this by using the 'QGIS' Python API via the command line. Hence, RQGIS extends R's statistical power by the incredible vast geo-functionality of 'QGIS' (including also 'GDAL', 'SAGA'- and 'GRASS'-GIS among other third-party providers). This in turn creates a powerful environment for advanced and innovative (geo-)statistical geocomputing. 'QGIS' is licensed under GPL version 2 or greater and is available from <>.


RQGIS 1.0.3


  • Linux: qgis_session_info() now tries several times to find out about the installed GRASS version (find frequently fails at the first attempt when used witin a function), and additionally suppresses a confusing warning message regarding access rights (permission denied when trying to access points.shp, however these points are accessed regardless of this message since they are used to test if GRASS can be accessed which is the case).
    • If a user specifies simply a basename for an input or output file, run_qgis() will now look for this file in the working directory (getwd()) or save it to this locations (suggested by @rkrug).
    • Specifying all parameters of a QGIS geoalgorithm in the "wrong" order caused an error. Issue solved this problem (@raff-k)
    • qgis_session_info() no longer prints the supported saga versions if there is nothing to report (method supportedVersions was deleted from SagaAlgorithmProvider since QGIS 2.18.10)
    • run_qgis() accepts network addresses as filenames under Windows again (#735e856, @susanatfybr)
    • run_qgis(), pass_args() and save_spatial_objects() now have an additional parameter named NA_flag, which allows to specify a value for NAs when exporting rasters (issue #93 raised by @raff-k and solved through #9e74a4a ).


  • get_args_man(), run_qgis() and pass_args() now print which default options were chosen (suggested by @rkrug).
  • more extensive testing through a new test file (test-paper-analysis)
  • get_grp() was replaced by the more generic get_extent(). If a geoalgorithm requires an extent object it will be computed automatically from the provided input spatial objects (if not specified explicitly by the user) (#95).

RQGIS 1.0.2


  • making sure that setup_win() works properly when the working directory is a server (commit ccc1baa & 263a1cf)
  • solving winslash problems occurring in conjunction with Python, e.g., when in tempdir() directory names start with \n or \t (see commits 484e1d3, 8befac3 and issue #71)
  • set_env() now uses forward instead of backward slashes (commit 8befac3 and issue #83)
  • making sure under Linux that the decimal operator is a colon not a comma with the help of Sys.setlocale (see commit f3c7e15)
  • making sure that default parameter values will not be overwritten by RQGIS.check_args (commit 29fb26a and issue #79)
  • reticulate 1.1 caused some trouble due to json parsing in conda_list() (solved by:; @jjallaire).


  • RQGIS now supports FreeBSD (#78, @rhurlin)

RQGIS 1.0.1


  • merging and into
  • New function parameter show_output_paths in run_qgis. Setting it to FALSE suppresses the printing of the output file paths.
  • random_points is now an sf-object (required also some adjustments in run_qgis and our tests)
  • run_qgis doesn't print a space any longer if the Python message is empty
  • developing and improving test coverage
  • adding GDAL version to qgis_session_info
  • load_output now supports all GDAL-supported drivers. Of course, this depends on the system setup (#72).
  • deleting deprecated function arguments show_msg and check_params (run_qgis)
  • deleting deprecated function argument ltr (set_env)

RQGIS 1.0.0


  • RQGIS now uses reticulate to establish a tunnel to the QGIS Python API (instead of starting a new Python session each time a function is called; #59). Consequently, we had to rewrite all RQGIS functions. Internally, the Python session is established by calling the new function open_app. open_app in turn makes advantage of various new helper functions (setup_win(), run_ini(), setup_linux(), setup_mac()). Additionally, we put much of the Python code into inst/python. import_setup contains much of the necessary import statements to run QGIS from within R. python_funs contains the RQGIS class (#32) containing several methods to call from within R (get_args_man(), open_help(), qgis_session_info(), etc.).


  • The user can now specify QGIS geoalgorithm parameters as R named arguments using the ellipsis-argument ... (#58).

  • We rewrote the load_output-argument of run_qgis. It is now a logical argument. If TRUE, run_qgis() will automatically load all the output layers explicitly specified by the user back into R (#60).

  • Extensive error-/misspecification checking. To do so, we now submit a Python-dictionary - containing all parameters and arguments - to processing.runalg. This also allows to check parameter names. Before the **args-argument simply converted our input in a list containing the arguments (but not the parameter names). Using the Python dictionary has the additional benefit that we no longer have to take care of the order in which the function parameters are specified. Besides, we now also make sure that the user can only specify available options. And if the user provides the verbal notation, pass_args internally converts this input in the corresponding number notation as required by the QGIS API (#64, @tim-salabim; #65).

  • RQGIS now supports simple features (sf; #43, @einvindhammers).

  • support for MultiParameterInput through two new helper functions save_spatial_objects and get_grp (

  • RQGIS now supports QGIS osgeo4mac homebrew installations. This is also the recommended installation way from now on as it does not cause irritating error messages like the Kyngchaos QGIS binary.

  • find_algorithms now accepts regular expressions as argument for its search_term parameter

  • set_env() now caches its output, so calling it a second time, will load the cached output.

  • Under Windows set_env() now first searches the most likely places to find a QGIS installation.

  • changing set_env's parameter name from ltr to dev. When having multiple homebrew installations on mac (LTR and dev), the user can select which one to use with the dev argument in set_env(). Default uses the LTR version.

  • qgis_session_info() now warns Linux users that they might have to use a softlink when using grass7 in conjunction with QGIS (#52, @thengl)

  • changing the default for parameter options from FALSE to TRUE in get_args_man

  • reset_paths tries to restore the PATH environment variable, i.e. at least to make sure that all paths within PATH will still be available after having run open_app.


  • Adding new tests.

RQGIS 0.2.0


  • build_cmds now retrieves the working directory on the command line from where the script has been called (temporary folder), and makes it the working directory at the end of the batch script. This ensures that can be found and executed (necessary since QGIS 2.18.2 since they somehow change the wd in one of their .bat-files) (#26, @eivindhammers).

  • RQGIS now also does testing using the testthat-package (#20).

  • run_qgis stops if the user specifies one of the interactive QGIS Select-by operations.

  • run_qgis now stops if the output shapefile created by QGIS is empty.

  • run_qgis-message: Use qgis:creategrid instead of qgis:vectorgrid.

  • Fine-tuning of the documentation files.

  • Deleting redundancies in functions build_cmds, check_apps and execute_cmds.

  • Removing empty string from find_algorithms output.

  • Added a file to track changes to the package.

  • vignette update (MacOSX and homebrew installation) (#14, @pat-s)

Bug fixes

  • bug fix: we replaced findstr in set_env by the more general %SystemRoot%\\System32\\findstr.

  • bug fix: when constructing the cmd-command (in run_qgis), we need to avoid "double" shell quotes. This happened e.g., with grass7:r.viewshed. Additionally, we made sure that None, True and False are not shellquoted.

  • bug fix: when determining the GRASS REGION PARAMETER in run_qgis. To extract the extent of a spatial object ogrInfo needs the layer name without the file extension. To do that we now use the file_path_sans_ext of the tools package instead of a simple gsub-command. Previously, we simply returned everything in front of a colon. This caused problems with file names such as gis.osm_roads_free_1.shp.

  • bug fix: run_qgis function argument load_output now checks if the QGIS output was really created before trying to load it.

  • bug fix: There was a problem when using QGIS/Grass on a MacOS. Deleting one bash statement (paste0("export PATH='", qgis_env$root, "/Contents/MacOS/bin:$PATH'"))) solved the problem.

  • bug fix: qgis_session_info now also runs on MacOS (#34)

RQGIS 0.1.0

  • Initial CRAN release

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


1.0.3 by Jannes Muenchow, 2 months ago

Report a bug at

Browse source code at

Authors: Jannes Muenchow <> [aut, cre], Patrick Schratz <> [aut]

Documentation:   PDF Manual  

Task views: Analysis of Spatial Data

GPL-3 license

Imports raster, RCurl, readr, rgdal, sf, sp, stringr, tools, XML

Depends on reticulate

Suggests knitr, rgrass7, rmarkdown, testthat, RSAGA

System requirements: Python (>= 2.7), QGIS (>= 2.14)

See at CRAN