26.10. 配置外部应用程序

可以使用其他应用程序来扩展处理框架。依赖于外部应用程序的算法由其自己的算法提供程序管理。其他提供程序可以作为单独的插件找到,并使用QGIS插件管理器进行安装。

本节将向您展示如何配置处理框架以包括这些额外的应用程序,并解释基于这些应用程序的算法的一些特定功能。一旦正确配置了系统,您将能够从任何组件(如工具箱或模型设计器)执行外部算法,就像您对任何其他算法所做的那样。

默认情况下,不启用依赖于QGIS未附带的外部应用程序的算法。如果您的系统上安装了它们,则可以在处理设置对话框中启用它们。

26.10.1. 给Windows用户的注意事项

如果您不是高级用户,并且正在Windows上运行QGIS,则您可能对阅读本章的其余部分不感兴趣。确保使用独立安装程序在您的系统中安装QGIS。这将自动在您的系统中安装Saga和GRASS,并对它们进行配置,以便可以从QGIS运行它们。来自这些提供商的所有算法都将准备好运行,而不需要任何进一步的配置。如果使用OSGeo4W应用程序进行安装,请确保您还选择了saga和gras进行安装。

26.10.2. 关于文件格式的说明

使用外部软件时,在QGIS中打开文件并不意味着可以在该其他软件中打开和处理该文件。在大多数情况下,其他软件可以读取您在QGIS中打开的内容,但在某些情况下,这可能不是真的。使用数据库或不常见的文件格式时,无论是用于栅格还是矢量层,都可能会出现问题。如果发生这种情况,请尝试使用您确信两个程序都能理解的众所周知的文件格式,并检查控制台输出(在日志面板中)以找出问题所在。

例如,如果您使用GRASS栅格图层作为输入调用外部算法,则可能会遇到麻烦而无法完成工作。出于这个原因,这样的层将不会对算法可用。

但是,使用矢量图层应该不会有问题,因为在将图层传递给外部应用程序之前,QGIS会自动将原始文件格式转换为外部应用程序可以接受的格式。这会增加额外的处理时间,这对于较大的层可能非常重要,因此,如果处理来自DB连接的层比处理类似大小的shapefile格式数据集中的层需要更多时间,请不要惊讶。

不使用外部应用程序的提供程序可以处理您可以在QGIS中打开的任何图层,因为他们通过QGIS打开该图层以进行分析。

QGIS生成的所有栅格和矢量输出格式都可以用作输入层。有些提供程序不支持某些格式,但所有提供程序都可以导出为以后可由QGIS自动转换的通用格式。至于输入层,如果需要转换,可能会增加处理时间。

26.10.3. 关于矢量层选择的说明

也可以让外部应用程序知道QGIS内的矢量层中存在的选择。但是,这需要重写所有输入向量层,就像它们最初的格式不受外部应用程序支持一样。仅当不存在任何选定内容时,或者 Use only selected features 选项未在处理常规配置中启用,是否可以将层直接传递给外部应用程序。

在其他情况下,只需要导出选定的功能,这会导致更长的执行时间。

26.10.4. SAGA

如果SAGA包含在QGIS安装中,则可以在QGIS中运行SAGA算法。

如果你运行的是Windows,独立安装程序和OSGeo4W安装程序都包含SAGA。

26.10.4.1. 关于佐贺网格系统的限制

大多数需要多个输入栅格层的SAGA算法都要求它们具有相同的网格系统。也就是说,它们必须覆盖相同的地理区域并具有相同的像元大小,以便其对应的栅格匹配。当从QGIS调用SAGA算法时,您可以使用任何层,无论其像元大小和范围如何。当多个栅格图层被用作SAGA算法的输入时,QGIS会将它们重采样到一个公共格网系统,然后将它们传递给SAGA(除非SAGA算法可以处理来自不同格网系统的图层)。

公共网格系统的定义由用户控制,您将在设置窗口的SAGA组中找到几个参数来执行此操作。设置目标网格系统有两种方法:

  • 手动设置。您可以通过设置以下参数的值来定义范围:

    • Resampling min X

    • Resampling max X

    • Resampling min Y

    • Resampling max Y

    • Resampling cellsize

    请注意,QGIS将在该程度上重新采样输入图层,即使它们不与其重叠。

  • 从输入层自动设置。要选择此选项,只需选中 Use min covering grid system for resampling 选择。所有其他设置将被忽略,并使用覆盖所有输入层的最小范围。目标层的像元大小是输入层所有像元大小中的最大值。

对于不使用多个栅格层的算法,或不需要唯一输入栅格系统的算法,在调用SAGA之前不执行重采样,并且不使用这些参数。

26.10.4.2. 多波段图层的限制

与QGIS不同,SAGA不支持多波段图层。如果要使用多波段层(如RGB或多光谱图像),首先必须将其分割为单波段图像。为此,您可以使用“SAGA/网格工具/分割RGB图像”算法(从RGB图像创建三个图像)或“SAGA/网格工具/提取波段”算法(以提取单个波段)。

26.10.4.3. 单元格大小限制

SAGA假定栅格层在X轴和Y轴上具有相同的单元大小。如果使用水平和垂直单元格大小值不同的层,可能会得到意外的结果。在这种情况下,将在处理日志中添加一条警告,指示输入层可能不适合由SAGA处理。

26.10.4.4. 日志记录

当QGIS调用saga时,它使用其命令行界面进行调用,从而传递一组命令来执行所有必需的操作。Saga通过向控制台写入信息来显示其进度,其中包括已经完成的处理百分比以及其他内容。此输出经过过滤,用于在算法运行时更新进度条。

QGIS发送的命令和SAGA打印的附加信息都可以与其他处理日志消息一起记录,您可能会发现它们对于跟踪QGIS运行SAGA算法时发生的事情很有用。您将找到两个设置,即 Log console outputLog execution commands ,以激活该记录机制。

使用外部应用程序并通过命令行调用它们的大多数其他提供程序都有类似的选项,因此您也可以在处理设置列表中的其他位置找到它们。

26.10.5. R脚本

要在处理中启用R,您需要安装 Processing R Provider 为QGIS插件和配置R。

配置在中完成 Provider ► RProcessing 制表符,共 Settings ► Options

根据您的操作系统,您可能必须使用 R folder 指定R二进制文件的位置。

备注

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!

在……上面 Linux 您只需确保R文件夹位于PATH环境变量中。如果 R 在终端窗口中启动R,然后您就可以开始了。

安装后 Processing R Provider 插件,您将在 Processing Toolbox

  • Scatterplot 运行R函数,该函数从提供的矢量层的两个数值字段生成散点图。

  • test_sf 执行一些依赖于 sf 并可用来检查R包是否 sf 已安装。如果没有安装该程序包,R将尝试使用 Package repository 在中指定 Provider ► R 在处理选项中。缺省值为https://cran.r-project.org/.安装可能需要一些时间...

  • test_sp 可以用来检查R包是否 sp 已安装。如果未安装该程序包,R将尝试为您安装它。

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

如果您为QGIS正确配置了R,您应该能够运行这些脚本。

26.10.5.1. 添加QGIS集合中的R脚本

QGIS中的R集成与SAGA中的集成不同,因为没有一组预定义的算法可以运行(除了随 Processing R Provider 插件)。

QGIS资源库中提供了一组示例R脚本。执行以下步骤以使用加载和启用它们 QGIS Resource Sharing 插件。

  1. 添加 QGIS Resource Sharing 插件(您可能需要启用 Show also experimental plugins 在插件管理器中 Settings )

  2. 打开它(插件-->资源共享-->资源共享)

  3. 选择 Settings 选项卡

  4. 单击 Reload repositories

  5. 选择 All 选项卡

  6. 选择 QGIS R script collection 在列表中,然后单击 Install 按钮

  7. 该集合现在应该列在 Installed 选项卡

  8. 关闭插件

  9. 打开 Processing Toolbox ,如果一切正常,示例脚本将出现在R下的各个组中(下面的屏幕截图中只展开了一些组)。

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

    图 26.36 这个 Processing Toolbox 显示了一些R脚本

    顶部的脚本是来自 Processing R Provider 插件。

  10. 如果由于某种原因,脚本在 Processing Toolbox ,您可以尝试:

    1. 打开处理设置 (Settings ► Options ► Processing 选项卡)

    2. Providers ► R ► R scripts folder

      • 在Ubuntu上,将路径设置为(或者,最好是包含在路径中):

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

        ../../../_images/rscript_folder.png
      • 在Windows上,将路径设置为(或者,最好是包含在路径中):

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

      要编辑,请双击。然后,您可以选择只粘贴/键入路径,也可以使用 ... 按钮,然后按下 Add 按钮出现在打开的对话框中。这里可以提供几个目录。它们将用分号(“;”)分隔。

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

如果您想从QGIS2在线收藏中获取所有R脚本,您可以选择 QGIS R script collection (from QGIS 2) 而不是 QGIS R script collection 。您可能会发现,依赖于矢量数据输入或输出的脚本将无法工作。

26.10.5.2. 创建R脚本

您可以编写脚本并调用R命令,就像在R中所做的那样。本节将向您展示在QGIS中使用R命令的语法,以及如何在其中使用QGIS对象(层、表)。

要添加调用R函数的算法(或您开发并希望从QGIS获得的更复杂的R脚本),您必须创建一个执行R命令的脚本文件。

R脚本文件的扩展名为 .rsx ,如果您只需要了解R语法和R脚本的基本知识,创建它们就非常容易。它们应该存储在R脚本文件夹中。您可以指定文件夹 (R scripts folder ))中 R 处理设置对话框中的设置组)。

让我们来看看一个非常简单的脚本文件,它调用R方法 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 ,是非常有用的。

##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)

第一行,以两个Python注释符号开始 (## ),定义脚本的显示名称和组,并告诉QGIS有关其输入和输出的信息。

备注

要了解有关如何编写您自己的R脚本的更多信息,请查看 R Intro 部分,并查阅 QGIS R Syntax 一节。

当您声明一个输入参数时,QGIS会将该信息用于两件事:创建用户界面以询问用户该参数的值,以及创建可用作R函数输入的相应R变量。

在上面的示例中,我们声明了一个输入类型 vector ,命名为 Vector_layer 。执行该算法时,QGIS将打开用户选择的图层并将其存储在名为的变量中 Vector_layer 。因此,参数的名称是您在R中用来访问该参数值的变量的名称(因此,您应该避免使用保留的R字作为参数名称)。

空间参数(如矢量和栅格图层)使用 st_read() (或 readOGR )和 brick() (或 readGDAL )命令(您不必担心将这些命令添加到描述文件中--QGIS会这样做),并且它们存储为 sf (或 Spatial*DataFrame )对象。

表字段存储为包含所选字段名称的字符串。

向量文件可以使用 readOGR() 命令而不是 st_read() 通过指定 ##load_vector_using_rgdal 。这将产生一个 Spatial*DataFrame 对象而不是 sf 对象。

可以使用读取栅格文件 readGDAL() 命令而不是 brick() 通过指定 ##load_raster_using_rgdal

如果您是高级用户并且不希望QGIS为该图层创建对象,则可以使用 ##pass_filenames 以指示您更喜欢带有文件名的字符串。在这种情况下,您可以在对其中包含的数据执行任何操作之前打开该文件。

有了上面的信息,就可以理解R脚本的第一行(第一行不是以Python注释字符开头)。

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

这个 spsample 函数由 sp 库,所以我们要做的第一件事就是加载该库。变量 Vector_layer 包含一个 sf 对象。因为我们要使用一个函数 (spsample )来自 sp 库,我们必须将 sf 对象添加到 SpatialPolygonsDataFrame 对象使用 as 功能。

然后,我们调用 spsample 函数使用此对象和 numpoints 输入参数(指定要生成的点数)。

因为我们已经声明了一个名为 Output ,我们必须创建一个名为 Output 包含一个 sf 对象。

我们分两步完成这项工作。首先,我们创建一个 SpatialPolygonsDataFrame 对象从函数的结果中删除。 SpatialPointsDataFrame 函数,然后我们将该对象转换为 sf 对象使用 st_as_sf 函数(的 sf 库)。

您可以对中间变量使用任何您喜欢的名称。只需确保存储最终结果的变量具有定义的名称(在本例中 Output ),并且它包含合适的值(一个 sf 用于向量层输出的对象)。

在这种情况下,从 spsample 方法必须显式转换为 sf 对象通过 SpatialPointsDataFrame 对象,因为它本身是类的对象 ppp ,不能退还给QGIS。

如果您的算法生成栅格图层,则保存它们的方式将取决于您是否使用 ##dontuserasterpackage 选择。如果您使用过它,则使用 writeGDAL() 方法。如果不是,则 writeRaster() 方法,可以从 raster 将使用套餐。

如果您使用了 ##pass_filenames 选项,则使用 raster 套餐(带 writeRaster() )。

如果您的算法不生成层,而是在控制台中生成文本结果,则必须指出您希望在执行完成后显示控制台。为此,只需启动生成要打印的结果的命令行 > (‘大于’)符号。仅从前缀为 > 都显示出来了。例如,以下是对矢量层属性的给定字段(列)执行正态测试的算法的描述文件:

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

最后一行的输出是打印的,但第一行的输出不是(QGIS自动添加的其他命令行的输出也不是)。

如果您的算法创建了任何类型的图形(使用 plot() 方法)中,添加以下行 (output_plots_to_html 曾经是 showplots ):

##output_plots_to_html

这将导致QGIS将所有R个图形输出重定向到一个临时文件,该文件将在R执行完成后打开。

图形和控制台结果都将通过处理结果管理器获得。

有关更多信息,请查看官方QGIS集合中的R脚本(您可以使用 QGIS Resource Sharing 插件,如其他地方所解释的)。它们中的大多数都相当简单,将极大地帮助您了解如何创建自己的脚本。

备注

这个 sfrgdalraster 默认情况下会加载库,因此您不必添加相应的 library() 命令。但是,您可能需要的其他库必须通过键入以下命令显式加载: library(ggplot2) (要加载 ggplot2 库)。如果您的计算机上尚未安装该程序包,处理程序将尝试下载并安装该程序包。通过这种方式,该包也将在R独立版本中可用。 Be aware 如果必须下载该程序包,则第一次运行脚本可能需要很长时间。

26.10.6. R个库

R脚本 sp_test 尝试加载R包 spraster

26.10.6.1. R运行sf_test时安装的库

R脚本 sf_test 尝试加载 sfraster 。如果没有安装这两个包,R可能会尝试加载并安装它们(以及它们所依赖的所有库)。

下面的R库以 ~/.local/share/QGIS/QGIS3/profiles/default/processing/rscripts 之后 sf_test 已从Ubuntu上的处理工具箱运行,版本为2.0 Processing R Provider 插件和全新安装的 R 3.4.4( apt 包装 r-base-core 仅限):

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

26.10.7. GRASS

配置GRASS与配置SAGA没有太大区别。首先,必须定义GRASS文件夹的路径,但前提是您运行的是Windows。

默认情况下,处理框架尝试将其GRASS连接器配置为使用QGIS附带的GRASS分发版本。对于大多数系统来说,这应该没有问题,但如果您遇到问题,您可能需要手动配置GRASS连接器。此外,如果您想使用不同的GRASS安装,您可以更改设置以指向安装其他版本的文件夹。需要GRASS 7才能使算法正常工作。

如果您运行的是Linux,您只需确保GRASS已正确安装,并且可以从终端窗口运行,没有问题。

GRASS算法使用一个区域进行计算。该区域可以使用与SAGA配置中的值相似的值手动定义,也可以自动定义,采用覆盖每次执行算法所用的所有输入层的最小范围。如果后一种方法是您喜欢的行为,只需检查 Use min covering region GRASS配置参数中的选项。

26.10.8. LAStools

使用 LAStools 在QGIS中,您需要下载并在您的计算机上安装LASTools,并在QGIS中安装LASTools插件(可从官方资源库获得)。

在Linux平台上,您将需要 Wine 才能运行一些工具。

在处理选项中激活和配置LASTools (Settings ► OptionsProcessing 选项卡, Providers ► LAStools ),您可以在其中指定LASTools的位置 (LAStools folder )和葡萄酒 (Wine folder )。在Ubuntu上,默认的Wine文件夹是 /usr/bin

26.10.9. OTB应用程序

QGIS处理框架完全支持OTB应用程序。

OTB (Orfeo ToolBox) is an image processing library for remote sensing data. It also provides applications that provide image processing functionalities. The list of applications and their documentation are available in OTB CookBook

备注

请注意,OTB不是随QGIS一起分发的,需要单独安装。OTB的二进制程序包可以在 download page

要配置QGIS处理以查找OTB库,请执行以下操作:

  1. 打开处理设置: Settings ► Options ► Processing (左面板)*

  2. 您可以在“提供商”下查看OTB:

    1. 扩展 OTB 选项卡

    2. 设置 OTB folder 。这是您的OTB安装位置。

    3. 设置 OTB application folder 。这是您的OTB应用程序的位置( <PATH_TO_OTB_INSTALLATION>/lib/otb/applications )

    4. 单击“确定”保存设置并关闭该对话框。

如果设置正确,OTB算法将在 Processing Toolbox

26.10.9.1. QGIS处理中可用的OTB设置的文档

  • OTB folder :这是OTB可用的目录。

  • OTB application folder :这是OTB应用程序的位置(S)。

    允许多条路径。

  • Logger level (可选):OTB应用程序使用的记录器级别。

    日志记录级别控制在算法执行期间打印的细节数量。记录器级别的可能值为 INFOWARNINGCRITICALDEBUG 。此值为 INFO 默认情况下。这是高级用户配置。

  • Maximum RAM to use (可选):默认情况下,OTB应用程序使用所有可用的系统RAM。

    但是,您可以使用此选项指示OTB使用特定数量的RAM(以MB为单位)。值256将被OTB处理提供程序忽略。这是高级用户配置。

  • Geoid file (可选):大地水准面文件的路径。

    此选项设置OTB应用程序中的lev.dem.geid和lev.geid参数值。全局设置此值使用户能够在多个处理算法之间共享该值。默认情况下为空。

  • SRTM tiles folder (可选):SRTM磁贴可用的目录。

    SRTM数据可以存储在本地,以避免在处理过程中下载文件。此选项设置OTB应用程序中的lev.dem.Path和lev.dem参数的值。全局设置此值使用户能够在多个处理算法之间共享该值。默认情况下为空。

26.10.9.2. QGIS和OTB版本之间的兼容性

所有OTB版本(从OTB 6.6.1开始)都与最新的QGIS版本兼容。

26.10.9.3. 故障排除

如果您对QGIS处理中的OTB应用程序有问题,请在 OTB bug tracker ,使用 qgis 标签。

有关OTB和QGIS的更多信息,请访问 here