Configureren externe toepassingen

The processing framework can be extended using additional applications. Algorithms that rely on external applications are managed by their own algorithm providers. Additional providers can be found as separate plugins, and installed using the QGIS Plugin Manager.

Dit gedeelte zal u laten zien hoe het framework Processing te configureren zodat het deze aanvullende toepassingen opneemt, en zal het enkele bijzondere mogelijkheden uitleggen van de algoritmen die op hen gebaseerd zijn. Als u het systeem eenmaal juist hebt geconfigureerd, zult u in staat zijn externe algoritmen uit te voeren vanuit elke component, zoals de Toolbox of Grafische modellen bouwen, net zoals u doet met elk ander algoritme.

Standaard zijn algoritmen, die afhankelijk zijn van een externe toepassing en niet worden meegeleverd met QGIS, niet ingeschakeld. U kunt ze inschakelen in het dialoogvenster Opties als zij al zijn geïnstalleerd op uw systeem.

Een opmerking voor gebruikers van Windows

Als u nog geen gevorderde gebruiker bent en u voert QGIS uit op Windows, bent u misschien niet geïnteresseerd in het lezen van de rest van dit hoofdstuk. Zorg er voor dat u QGIS op uw systeem installeert met behulp van het zelfstandige installatieprogramma. Dat zal automatisch SAGA en GRASS op uw systeem installeren en ze configureren, zodat zij vanuit QGIS kunnen worden uitgevoerd. Alle algoritmen van deze providers zullen gereed zijn om te worden uitgevoerd, zonder verdere configuratie. Als wordt geïnstalleerd met de toepassing OSGeo4W, zorg er dan voor dat u ook SAGA en GRASS selecteert om te installeren.

Een opmerking met betrekking tot bestandsindelingen

Bij het gebruiken van externe software, betekent het openen van een bestand in QGIS niet dat het kan worden geopend en verwerkt kan worden in die andere software. In de meeste gevallen kan andere software lezen wat u hebt geopend in QGIS , maar in sommige gevallen hoeft dat niet zo te zijn. Bij het gebruiken van databases of ongebruikelijke bestandsindelingen, voor raster- of vectorlagen, zouden problemen kunnen optreden. Als dat gebeurt, probeer dan goed bekende bestandsindelingen te gebruiken waarvan u weet dat zij door beide programma’s worden begrepen, en controleer de uitvoer in de console (in het paneel Log) om uit te zoeken wat er fout gaat.

U zou problemen kunnen ondervinden en niet in staat zijn uw werk te voltooien als u een extern algoritme aanroept met rasterlagen van GRASS als invoer. Deze lagen zullen, om deze reden, niet verschijnen als beschikbaar voor algoritmen.

U zou echter geen problemen moeten ondervinden met vectorlagen, omdat QGIS automatisch converteert vanuit de originele bestandsindeling naar een die geaccepteerd wordt door de externe toepassing vóórdat de laag daaraan wordt doorgegeven. Dit zorgt voor extra verwerkingstijd, die significant zou kunnen zijn voor zeer grote lagen, wees dus niet verbaasd als het meer tijd vergt om een laag uit een DB-verbinding te verwerken, dan voor een soortgelijke grootte vanuit een gegevensset in de indeling Shapefile.

Providers die geen externe toepassingen gebruiken kunnen elke laag verwerken die u kunt openen in QGIS, omdat zij het voor analyse openen via QGIS.

Alle raster- en vectorindelingen, die worden geproduceerd door QGIS, kunnen als invoerlagen worden gebruikt. Sommige providers ondersteunen bepaalde indelingen niet, maar zij kunnen allemaal worden geëxporteerd naar veelvoorkomende indelingen voor rasterlagen die later automatisch kunnen worden getransformeerd door QGIS. Net als voor invoerlagen, als een conversie nodig is, zou dat de verwerkingstijd kunnen verhogen.

Een opmerking over selecties van vectorlagen

Externe toepassingen kunnen ook bewust worden gemaakt van de selecties die bestaan in vectorlagen binnen QGIS. Dat vereist echter het opnieuw schrijven van alle vectorlagen voor de invoer, net als wanneer zij origineel in een indeling waren die niet wordt ondersteund door de externe toepassing. Alleen wanneer er geen selectie bestaat, of de optie Alleen geselecteerde objecten gebruiken niet is ingeschakeld in de algemene configuratie van Processing, kan een laag direct worden doorgegeven aan een externe toepassing.

In andere gevallen is slechts het exporteren van de geselecteerde objecten nodig, wat er voor zorgt dat de tijd voor uitvoering langer duurt.

SAGA

SAGA algorithms can be run from QGIS if SAGA included in the QGIS installation.

If you are running Windows, both the stand-alone installer and the OSGeo4W installer include SAGA.

Over beperkingen van het SAGA rastersysteem

De meeste algoritmen van SAGA die meerdere invoerrasterlagen vereisen eisen dat zij hetzelfde rastersysteem hebben. Dat is, zij moeten hetzelfde geografische gebied bedekken en dezelfde celgrootte hebben, zodat hun overeenkomende rasters overeenkomen. Bij het aanroepen van algoritmen van SAGA vanuit QGIS kunt u elke laag gebruiken, ongeacht celgrootte en bereik ervan. Wanneer meerdere rasterlagen worden gebruikt als invoer voor een algoritme van SAGA, resampelt QGIS ze naar een algemeen rastersysteem en geeft ze dan door aan SAGA (tenzij het algoritme van SAGA kan werken met lagen uit verschillende rastersystemen).

De definitie van dat algemene rastersysteem wordt beheerd door de gebruiker en u zult verschillende parameters vinden in de groep SAGA van het venster Opties om dat te doen. Er zijn twee manieren voor het instellen van de doel-rastersystemen:

  • Handmatig instellen. U definieert het bereik door het instellen van de volgende parameters:

    • Resampling min X

    • Resampling max X

    • Resampling min Y

    • Resampling max Y

    • Resampling cellsize

    Onthoud dat QGIS invoerlagen zal resamplen tot dat bereik, zelfs als ze er niet mee overlappen.

  • Automatisch instellen vanuit invoerlagen. Selecteer eenvoudigweg de optie Use min covering grid system for resampling om deze optie te selecteren. Alle andere instellingen zullen worden genegeerd en het minimum bereik dat alle invoerlagen bedekt, zal worden gebruikt. De celgrootte van de doellaag is het maximum van alle celgrootten van de invoerlagen.

Voor algoritmen die niet meerdere rasterlagen gebruiken, of voor die welke geen uniek rastersysteem voor invoer nodig hebben, wordt geen resamplen uitgevoerd vóór het aanroepen van SAGA en worden deze parameters niet gebruikt.

Beperkingen voor lagen met meerdere banden

Anders dan QGIS heeft SAGA geen ondersteuning voor lagen met meerdere banden. Als u een laag met meerdere banden wilt gebruiken (zoals een RGB of multispectrale afbeelding), dient u die eerst te splitsen in afbeeldingen met één band. U kunt het algoritme ‘SAGA/Grid - Tools/Split RGB image’ (wat drie afbeeldingen uit een RGB-afbeelding maakt) of het algoritme ‘SAGA/Grid - Tools/Extract band’ (om één enkele band uit te nemen) gebruiken om dat te doen.

Beperkingen in celgrootte

SAGA gaat er van uit dat rasterlagen dezelfde celgrootte hebben in de X- en de Y-as. Als u werkt met een laag met verschillende waarden voor horizontale en verticale celgrootte, zou u onverwachte resultaten kunnen krijgen. In dat geval zal een waarschuwing worden toegevoegd aan het log van Processing, die aangeeft dat een invoerlaag niet geschikt zou kunnen zijn om te worden verwerkt door SAGA.

Loggen

Als QGIS SAGA aanroept doet het dat door middel van de interface voor de opdrachtregel, en dus door het doorgeven van een set opdrachten om alle vereiste bewerkingen uit te voeren. SAGA geeft zijn voortgang weer door informatie te schrijven naar de console, wat het percentage van reeds verrichte verwerking bevat, naast aanvullende inhoud. Deze uitvoer wordt gefilterd en gebruikt om de voortgangsbalk bij te werken terwijl het algoritme wordt uitgevoerd.

Zowel de opdrachten die zijn verstuurd door QGIS als de aanvullende informatie die is afgedrukt door SAGA kunnen worden gelogd naast andere logberichten voor de verwerking, en u zou ze handig kunnen vinden om te kunnen zien wat er gebeurt als QGIS een algoritme van SAGA uitvoert. U zult twee instellingen vinden, namelijk Log console-uitvoer en Log uitvoeringsopdrachten, om dat mechanisme voor het loggen te activeren.

De meeste andere providers die externe toepassingen gebruiken en ze aanroepen via de opdrachtregel hebben soortgelijke opties, u zult ze dus ook op andere plaatsen in de lijst met instellingen voor Processing vinden.

R scripts

To enable R in Processing you need to install the Processing R Provider plugin and configure R for QGIS.

Configuration is done in Provider-> R in the Processing tab of Settings-> Options.

Depending on your operating system, you may have to use R folder to specify where your R binaries are located.

Notitie

On Windows the R executable file is normally in a folder (R-<version>) under C:\Program Files\R\. Specify the folder and NOT the binary!

On Linux you just have to make sure that the R folder is in the PATH environment variable. If R in a terminal window starts R, then you are ready to go.

After installing the Processing R Provider plugin, you will find some example scripts in the Processing Toolbox:

  • Scatterplot runs an R function that produces a scatter plot from two numerical fields of the provided vector layer.

  • test_sf does some operations that depend on the sf package and can be used to check if the R package sf is installed. If the package is not installed, R will try to install it (and all the packages it depends on) for you, using the Package repository specified in Provider-> R in the Processing options. The default is http://cran.at.r-project.org/. Installing may take some time…

  • test_sp can be used to check if the R package sp is installed. If the package is not installed, R will try to install it for you.

../../../_images/processing_toolbox_r_install.png

If you have R configured correctly for QGIS, you should be able to run these scripts.

Adding R scripts from the QGIS collection

R integration in QGIS is different from that of SAGA in that there is not a predefined set of algorithms you can run (except for some example script that come with the Processing R Provider plugin).

A set of example R scripts is available in the QGIS Repository. Perform the following steps to load and enable them using the QGIS Resource Sharing plugin.

  1. Add the QGIS Resource Sharing plugin (you may have to enable Show also experimental plugins in the Plugin Manager Settings)

  2. Open it (Plugins-> Resource Sharing-> Resource Sharing)

  3. Choose the Settings tab

  4. Click Reload repositories

  5. Choose the All tab

  6. Select QGIS R script collection in the list and click on the Install button

  7. The collection should now be listed in the Installed tab

  8. Close the plugin

  9. Open the Processing Toolbox, and if everything is OK, the example scripts will be present under R, in various groups (only some of the groups are expanded in the screenshot below).

    ../../../_images/processing_toolbox_r_scripts.png

    The Processing Toolbox with some R scripts shown

    The scripts at the top are the example scripts from the Processing R Provider plugin.

  10. If, for some reason, the scripts are not available in the Processing Toolbox, you can try to:

    1. Open the Processing settings (Settings-> Options-> Processing tab)

    2. Go to Providers-> R-> R scripts folder

      • On Ubuntu, set the path to (or, better, include in the path):

        /home/<user>/.local/share/QGIS/QGIS3/profiles/default/resource_sharing/repositories/github.com/qgis/QGIS-Resources/collections/rscripts

        ../../../_images/rscript_folder.png
      • On Windows, set the path to (or, better, include in the path):

        C:\Users\<user>\AppData\Roaming\QGIS\QGIS3\profiles\default\resource_sharing\repositories\github.com\qgis\QGIS-Resources\collections\rscripts

      To edit, double-click. You can then choose to just paste / type the path, or you can navigate to the directory by using the button and press the Add button in the dialog that opens. It is possible to provide several directories here. They will be separated by a semicolon (“;”).

      ../../../_images/rscript_folder_add.png

If you would like to get all the R scrips from the QGIS 2 on-line collection, you can select QGIS R script collection (from QGIS 2) instead of QGIS R script collection. You will find probably find that scripts that depend on vector data input or output will not work.

Creating R scripts

You can write scripts and call R commands, as you would do from R. This section shows you the syntax for using R commands in QGIS, and how to use QGIS objects (layers, tables) in them.

U dient een scriptbestand te maken dat opdrachten van R uitvoert om een algoritme toe te voegen dat een functie in R aanroept (of een meer complex script in R dat u heeft ontwikkeld en dat u beschikbaar zou willen hebben vanuit QGIS).

R script files have the extension .rsx, and creating them is pretty easy if you just have a basic knowledge of R syntax and R scripting. They should be stored in the R scripts folder. You can specify the folder (R scripts folder) in the R settings group in Processing settings dialog).

Let’s have a look at a very simple script file, which calls the R method spsample to create a random grid within the boundary of the polygons in a given polygon layer. This method belongs to the maptools package. Since almost all the algorithms that you might like to incorporate into QGIS will use or generate spatial data, knowledge of spatial packages like maptools and sp/sf, is very useful.

##Random points within layer extent=name
##Point pattern analysis=group
##Vector_layer=vector
##Number_of_points=number 10
##Output=output vector
library(sp)
spatpoly = as(Vector_layer, "Spatial")
pts=spsample(spatpoly,Number_of_points,type="random")
spdf=SpatialPointsDataFrame(pts, as.data.frame(pts))
Output=st_as_sf(spdf)

The first lines, which start with a double Python comment sign (##), define the display name and group of the script, and tell QGIS about its inputs and outputs.

Notitie

To find out more about how to write your own R scripts, have a look at the R Intro section in the training manual and consult the QGIS R Syntax section.

When you declare an input parameter, QGIS uses that information for two things: creating the user interface to ask the user for the value of that parameter, and creating a corresponding R variable that can be used as R function input.

In the above example, we have declared an input of type vector, named Vector_layer. When executing the algorithm, QGIS will open the layer selected by the user and store it in a variable named Vector_layer. So, the name of a parameter is the name of the variable that you use in R for accessing the value of that parameter (you should therefore avoid using reserved R words as parameter names).

Spatial parameters such as vector and raster layers are read using the st_read() (or readOGR) and brick() (or readGDAL) commands (you do not have to worry about adding those commands to your description file – QGIS will do it), and they are stored as sf (or Spatial*DataFrame) objects.

Table fields are stored as strings containing the name of the selected field.

Vector files can be read using the readOGR() command instead of st_read() by specifying ##load_vector_using_rgdal. This will produce a Spatial*DataFrame object instead of an sf object.

Raster files can be read using the readGDAL() command instead of brick() by specifying ##load_raster_using_rgdal.

If you are an advanced user and do not want QGIS to create the object for the layer, you can use ##pass_filenames to indicate that you prefer a string with the filename. In this case, it is up to you to open the file before performing any operation on the data it contains.

With the above information, it is possible to understand the first lines of the R script (the first line not starting with a Python comment character).

library(sp)
spatpoly = as(Vector_layer, "Spatial")
pts=spsample(polyg,numpoints,type="random")

The spsample function is provided by the sp library, so the first thing we do is to load that library. The variable Vector_layer contains an sf object. Since we are going to use a function (spsample) from the sp library, we must convert the sf object to a SpatialPolygonsDataFrame object using the as function.

Then we calling the spsample function, with this object and the numpoints input parameter (which specifies the number of points to generate).

Since we have declared a vector output named Output, we have to create a variable named Output containing an sf object.

We do this in two steps. First we create a SpatialPolygonsDataFrame object from the result of the function, using the SpatialPointsDataFrame function, and then we convert that object to an sf object using the st_as_sf function (of the sf library).

You can use whatever names you like for your intermediate variables. Just make sure that the variable storing your final result has the defined name (in this case Output), and that it contains a suitable value (an sf object for vector layer output).

In this case, the result obtained from the spsample method had to be converted explicitly into an sf object via a SpatialPointsDataFrame object, since it is itself an object of class ppp, which can not be returned to QGIS.

Als uw algoritme rasterlagen genereert, is de manier waarop zij worden opgeslagen afhankelijk van het feit of u al dan niet de optie ##dontuserasterpackage heeft gebruikt. Wanneer u die heeft gebruikt worden lagen opgeslagen met behulp van de methode writeGDAL(). Indien niet, zal de methode writeRaster() uit het pakket raster worden gebruikt.

If you have used the ##pass_filenames option, outputs are generated using the raster package (with writeRaster()).

If your algorithm does not generate a layer, but a text result in the console instead, you have to indicate that you want the console to be shown once the execution is finished. To do so, just start the command lines that produce the results you want to print with the > (‘greater than’) sign. Only output from lines prefixed with > are shown. For instance, here is the description file of an algorithm that performs a normality test on a given field (column) of the attributes of a vector layer:

##layer=vector
##field=field layer
##nortest=group
library(nortest)
>lillie.test(layer[[field]])

De uitvoer van de laatste regel wordt afgedrukt, maar de uitvoer van de eerste wordt dat niet (en ook de uitvoer van de andere opdrachtregels, die automatisch door QGIS werden toegevoegd, worden dat niet).

If your algorithm creates any kind of graphics (using the plot() method), add the following line (output_plots_to_html used to be showplots):

##output_plots_to_html

Dit zal er voor zorgen dat QGIS alle grafische uitvoer voor R zal omleiden naar een tijdelijk bestand, wat zal worden geopend als de uitvoering van R is voltooid.

Both graphics and console results will be available through the processing results manager.

For more information, please check the R scripts in the official QGIS collection (you download and install them using the QGIS Resource Sharing plugin, as explained elsewhere). Most of them are rather simple and will greatly help you understand how to create your own scripts.

Notitie

The sf, rgdal and raster libraries are loaded by default, so you do not have to add the corresponding library() commands. However, other additional libraries that you might need have to be explicitly loaded by typing: library(ggplot2) (to load the ggplot2 library). If the package is not already installed on your machine, Processing will try to download and install it. In this way the package will also become available in R Standalone. Be aware that if the package has to be downloaded, the script may take a long time to run the first time.

R libraries

The R script sp_test tries to load the R packages sp and raster.

R libraries installed when running sf_test

The R script sf_test tries to load sf and raster. If these two packages are not installed, R may try to load and install them (and all the libraries that they depend on).

The following R libraries end up in ~/.local/share/QGIS/QGIS3/profiles/default/processing/rscripts after sf_test has been run from the Processing Toolbox on Ubuntu with version 2.0 of the Processing R Provider plugin and a fresh install of R 3.4.4 (apt package r-base-core only):

abind, askpass, assertthat, backports, base64enc, BH, bit, bit64, blob, brew, callr, classInt, cli, colorspace, covr, crayon, crosstalk, curl, DBI, deldir, desc, dichromat, digest, dplyr, e1071, ellipsis, evaluate, fansi, farver, fastmap, gdtools, ggplot2, glue, goftest, gridExtra, gtable, highr, hms, htmltools, htmlwidgets, httpuv, httr, jsonlite, knitr, labeling, later, lazyeval, leafem, leaflet, leaflet.providers, leafpop, leafsync, lifecycle, lwgeom, magrittr, maps, mapview, markdown, memoise, microbenchmark, mime, munsell, odbc, openssl, pillar, pkgbuild, pkgconfig, pkgload, plogr, plyr, png, polyclip, praise, prettyunits, processx, promises, ps, purrr, R6, raster, RColorBrewer, Rcpp, reshape2, rex, rgeos, rlang, rmarkdown, RPostgres, RPostgreSQL, rprojroot, RSQLite, rstudioapi, satellite, scales, sf, shiny, sourcetools, sp, spatstat, spatstat.data, spatstat.utils, stars, stringi, stringr, svglite, sys, systemfonts, tensor, testthat, tibble, tidyselect, tinytex, units, utf8, uuid, vctrs, viridis, viridisLite, webshot, withr, xfun, XML, xtable

GRASS

Configureren van GRASS is niet veel anders dan het configureren van SAGA. Eerst moet het pad naar de map GRASS worden gedefinieerd, maar alleen als u werkt op Windows.

Standaard probeert het framework Processing zijn verbinding naar GRASS te configureren om de distributie van GRASS te gebruiken die wordt meegeleverd met QGIS. Dit zou voor de meeste systemen zonder problemen moeten werken, maar als u problemen ondervindt, zou u de verbinding naar GRASS handmatig moeten configureren. Ook als u een andere installatie van GRASS wilt gebruiken kunt u de instelling wijzigen zodat die verwijst naar de map waar die andere versie is geïnstalleerd. GRASS 7 is nodig om de algoritmen juist te laten werken.

Als u werkt op Linux hoeft u er slechts voor te zorgen dat GRASS correct is geïnstalleerd, en dat het zonder problemen kan worden uitgevoerd vanaf een terminalvenster.

Algoritmen van GRASS gebruiken een regio voor berekeningen. Deze regio kan handmatig worden gedefinieerd met behulp van waarden die soortgelijk zijn aan die welke werden gebruikt in de configuratie van SAGA, of automatisch, met het minimum bereik dat alle gebruikte invoerlagen bedekt bij het elke keer uitvoeren van het algoritme. Als de laatste benadering het gedrag is dat u prefereert, selecteer dan de optie Use min covering region in de configuratie van de parameters in GRASS.

LAStools

Voor het gebruiken van LAStools in QGIS, moet u LAStools downloaden en installeren op uw computer en de plug-in LAStools installeren (beschikbaar in de officiële opslagplaats) in QGIS.

Op platformen voor Linux zult u Wine nodig hebben om enkele van de gereedschappen uit te kunnen voeren.

LAStools wordt geactiveerd en geconfigureerd in de opties voor Processing (Extra ‣ Opties, tab Processing, Providers‣ LAStools), waar u de locatie van the location of LAStools (map LAStools) en Wine (map Wine) kunt specificeren. Op Ubuntu is de standaard map voor Wine /usr/bin.