26.5. 模型设计师
这个 model designer 允许您使用简单易用的界面创建复杂的模型。在使用地理信息系统时,大多数分析操作不是孤立的,而是操作链的一部分。使用模型设计器,可以将该操作链包装到单个流程中,以便以后使用不同的输入集执行。无论涉及多少步骤和不同的算法,一个模型都是作为单个算法执行的,节省了时间和精力。
可以从处理菜单中打开模型设计器 (
)。26.5.1. 模型设计器界面

图 26.18 模型设计者
在其主要部分中,建模器有一个工作画布,可以在其中构建模型的结构和它表示的工作流。
在对话框的顶部,不同的菜单和 Navigation 工具栏提供了对各种工具的访问。
26.5.1.4. 嵌板
窗口的左侧是一个带有五个面板的部分,可用于将新元素添加到模型中:
Model Properties: specify the name (required) of the model and the group in which it will be displayed in the Processing Toolbox
Inputs :所有 input parameters 可以塑造你的模特
Algorithms: the available Processing algorithms
Variables :型号可以包含专用的 variables 它们是独一无二的,而且只对它们可用。模型中使用的任何表达式都可以访问这些变量。它们对于控制模型中的算法和通过改变单个变量来控制模型的多个方面很有用。可以在中查看和修改变量 Variables 面板。
Undo History :此面板将记录建模器中发生的所有事情,从而很容易取消您做错的事情。
26.5.1.5. 关于可用的算法
在设计模型时,可从工具箱执行的某些算法不会出现在可用算法列表中。要包含在模型中,算法必须具有正确的语义。如果算法没有这样明确定义的语义(例如,如果不能预先知道输出层的数量),则不可能在模型中使用它,并且它不会出现在您可以在Modeler对话框中找到的算法列表中。另一方面,有些算法特定于建模者。这些算法位于‘Modeler Tools’组中。
26.5.2. 创建模型
创建模型涉及两个基本步骤:
Definition of necessary inputs 。这些输入将被添加到参数窗口,因此用户可以在执行模型时设置它们的值。模型本身是一种算法,因此对于处理框架中可用的所有算法,参数窗口都是自动生成的。
Definition of the workflow 。使用模型的输入数据,通过添加算法并选择它们如何使用定义的输入或由模型中的其他算法生成的输出来定义工作流。
26.5.2.1. 投入的定义
第一步是定义模型的输入。以下元素位于 Inputs Modeler窗口左侧的面板:
备注
将鼠标悬停在输入上将显示包含附加信息的工具提示。
当双击某个元素时,会显示一个允许您定义其特征的对话框。根据参数的不同,对话框将包含至少一个元素(描述,这是用户在执行模型时将看到的内容)。例如,当添加一个数值时,如下图所示,除了参数的描述外,还必须设置一个默认值和有效值的范围。

图 26.19 模型参数定义
可以将输入定义为模型的必填项,方法是选中
Mandatory
选项,并通过选中
Advanced
复选框可以将输入设置为在 Advanced
一节。当模型有许多参数,并且其中一些参数不是微不足道的,但您仍然想要选择它们时,这一点特别有用。
对于每个添加的输入,都会在建模器画布中添加一个新元素。

图 26.20 模型参数
您还可以通过从列表中拖动输入类型并将其放在Modeler画布中需要它的位置来添加输入。如果您想要更改现有输入的参数,只需双击它,相同的对话框就会弹出。
当在另一个模型中使用模型时,所需的输入和输出将显示在画布中。
26.5.2.2. 工作流程的定义
在下面的示例中,我们将添加两个输入和两个算法。该模型的目的是使用将高程值从DEM栅格图层复制到线图层 Drape
算法,然后使用 Climb Along Line
算法。
在 Inputs 选项卡中,将两个输入选择为 Vector Layer
对于这条线路和 Raster Layer
为了DEM。现在,我们准备将算法添加到工作流中。
算法可以在 Algorithms 面板,其分组方式与处理工具箱中的分组方式大致相同。

图 26.21 模型输入
要将算法添加到模型中,请双击其名称或将其拖放,就像输入一样。至于输入,您可以更改算法的描述并添加注释。添加算法时,将出现一个执行对话框,其内容与从工具箱执行算法时显示的执行面板中的内容类似。下图显示了 Drape (set Z value from raster)
以及 Climb along line
算法对话框。

图 26.22 模型算法参数
正如你所看到的,但是有一些不同之处。每个参数旁边都有一个下拉菜单,允许您控制在工作流程中如何处理这些参数:
Value :允许您为参数指定静态值。根据参数类型,小部件将允许您输入数字 (
5.0
),一个字符串 (mytext
),选择加载到qgis工程或文件夹中的层(S),从列表中拾取项目,...Pre-calculated Value :打开 Expression Builder 对话框中,并允许您定义用于填充参数的表达式。模型输入与其他一些图层统计数据一起提供为 variables 和列在表达式生成器的搜索对话框的顶部。在执行子算法之前对该表达式求值一次,并在该算法的执行过程中使用该表达式。
Algorithm Output :允许使用另一个算法的输出作为当前算法的输入。对于模型输入,此选项将列出该参数的所有合适输入。
这个 output parameter 还在其下拉菜单中具有以下选项:
为子算法添加静态输出,例如,始终将子算法的输出保存到预定义的Geopackage或Postgres图层
对子算法使用基于表达式的输出值,例如根据今天的日期生成自动文件名并将输出保存到该文件
使用模型输入,例如 File/Folder 用于指定输出文件或文件夹的模型输入
使用另一个算法输出,例如 Create directory 算法(来自 Modeler tools )
一项额外的
Model Output 选项使算法的输出在模型中可用。如果该算法生成的层仅用作另一种算法的输入,请不要编辑该文本框。
在下图中,您可以看到两个定义为
Model Input
和临时输出层:图 26.23 算法输入和输出参数
您还会找到一个名为的附加参数 Dependencies 这在从工具箱调用算法时不可用。此参数允许您通过将一个算法显式定义为 parent 现在的那个。这将迫使 parent 要在当前算法之前执行的算法。
当您使用先前算法的输出作为算法的输入时,这将隐式地将先前算法设置为当前算法的父算法(并将相应的箭头放置在建模器画布中)。然而,在某些情况下,一种算法可能依赖于另一种算法,即使它不使用其中的任何输出对象(例如,对PostGIS数据库执行SQL语句的算法和将层导入到同一数据库中的另一种算法)。在这种情况下,只需在 Dependencies 参数,它们将以正确的顺序执行。
一旦为所有参数分配了有效值,请单击 OK 算法将被添加到画布中。它将链接到画布中的元素(算法或输入),这些元素提供用作算法输入的对象。
属性将元素拖到画布上的其他位置。 Select/Move Item 工具。这有助于使模型的结构更清晰、更直观。您还可以调整元素的大小,抓住它们的边界。如果输入或算法的描述很长,这一点尤其有用。使用 选项选中后,可以将调整大小或位移的项目绑定到虚拟网格,以实现更直观的算法设计。
元素之间的链接会自动更新,并且您可以看到 +
按钮位于每个算法的顶部和底部。单击该按钮将列出算法的所有输入和输出,以便您可以快速概述。

图 26.24 一个完整的模型
与
工具,您可以添加一个可拖动的 box 到画布上。此功能在大型模型中非常有用,可以将建模器画布中的相关元素分组,并保持工作流的整洁。例如,我们可以将示例中的所有输入组合在一起:
图 26.25 模型组框
您可以更改框的名称和颜色。组框与以下组件一起使用时非常有用
工具,允许您缩放到模型的特定部分。您还可以使用鼠标滚轮进行放大和缩小。您可能希望更改输入的顺序以及它们在主模型对话框中的列出方式。在列表的底部 Input
panel you will find the Reorder Model Inputs...
按钮,并通过单击该按钮弹出一个新对话框,允许您更改输入的顺序:

图 26.26 重新排序模型输入
还可以设置模型输出在将结果加载到项目时必须使用的特定顺序。这为模型创建者提供了一种在运行模型时确保在画布上对层进行逻辑排序的方法,例如将矢量层输出放置在栅格层输出上,或将点层放置在多边形层上。模型创建者还可以为输出设置可选的“Group Name”,以便使用新的组名或通过将其添加到现有组来自动对层树中的输出进行分组。在 Model
menu you will find the Reorder Output Layers...
条目,然后单击它,将弹出一个新对话框,允许您更改输出层的顺序:

图 26.27 对输出图层进行重新排序
还可以将注释添加到建模器中的输入或算法。这可以通过进入 Comment 选项卡,或用鼠标右键单击。在同一选项卡中,可以手动为各个模型注释设置颜色。注释仅在建模器画布中可见,在最终算法对话框中不可见;可通过停用来隐藏注释 。
您可以在任何时候通过单击 Run model 纽扣。当使用编辑器执行模型时,任何非默认值都将保存在输入中。这意味着稍后在编辑器中执行模型时,对话框将在随后的任何运行中预先填充这些值。
为了使用工具箱中的算法,必须保存它并关闭Modeler对话框,以允许工具箱刷新其内容。
26.5.2.3. 记录您的模型
您需要记录您的模型,这可以从建模器本身完成。按下 :sup:`编辑模型帮助`按钮,会出现如下所示的对话框。

图 26.28 编辑帮助
在右侧,您将看到一个简单的HTML页面,该页面使用算法的输入参数和输出的描述创建,以及一些附加项目,如模型或其作者的一般描述。此外,还有一个示例部分,您可以在其中输入您自己的定制示例,以帮助解释模型的用法。第一次打开帮助编辑器时,所有这些描述都是空的,但您可以使用对话框左侧的元素对其进行编辑。在上半部分选择一个元素,然后在下面的文本框中写下其说明。
模型帮助保存为模型本身的一部分。
26.5.3. 保存和加载模型
26.5.3.1. 保存模型
使用 :sup:保存模型`按钮,用于保存当前模型和 |fileOpen| :sup:`打开模型`按钮打开以前保存的模型。模型随一起保存 :file:.model3` 分机。如果已从Modeler窗口保存了模型,则不会提示您输入文件名。由于已经有一个文件与该模型相关联,因此该文件将用于后续保存。
在保存模型之前,您必须在窗口上部的文本框中为其输入名称和组。
保存在中的模型 models
文件夹(提示您输入文件名以保存模型时的默认文件夹)将出现在相应分支的工具箱中。当调用工具箱时,它会搜索 models
包含的文件的文件夹 .model3
扩展,并加载它们包含的模型。由于模型本身就是一种算法,因此可以像任何其他算法一样将其添加到工具箱中。
模型也可以使用在项目文件中保存 :sup:保存项目中的模型`按钮。使用此方法保存的模型不会写入为 :file:.model3` 文件在磁盘上,但将嵌入到项目文件中。
项目模型可在 :guiabel:工具箱的`Project Models‘菜单和 菜单项。
Models文件夹可以从处理配置对话框中设置,位于 Modeler 一群人。
从加载的模型 models
文件夹不仅出现在工具箱中,而且还出现在 Algorithms Modeler窗口的。这意味着您可以将一个模型合并为更大模型的一部分,就像其他算法一样。
模特们将出现在 Browser 面板,并可以从那里运行。
26.5.3.2. 将模型导出为Python脚本
正如我们将在后面的章节中看到的,处理算法可以从QGIS Python控制台调用,并且可以使用Python创建新的处理算法。创建这样的Python脚本的一种快捷方法是创建一个模型,然后将其导出为一个Python文件。
要执行此操作,请单击 :sup:导出为脚本算法...`在建模器画布中或在处理工具箱中右键单击模型的名称,然后选择 |saveAsPython| :sup:`将模型导出为Python算法...。
26.5.3.3. 将模型导出为图像、PDF或SVG
也可以通过单击将模型导出为图像、SVG或PDF(用于说明目的) :sup:导出为镜像,
:sup:导出为PDF`或 |saveAsSVG| :sup:`导出为SVG。
26.5.4. 编辑模型
您可以编辑当前创建的模型,重新定义工作流以及定义模型的算法和输入之间的关系。
如果您在画布中右键单击某个算法,您将看到如下所示的上下文菜单:

图 26.29 建模器右键单击
选择 Remove 选项将导致删除所选算法。仅当没有依赖于某个算法的其他算法时,才能删除该算法。也就是说,如果没有来自算法的输出在不同的算法中用作输入。如果您尝试删除有其他算法依赖的算法,将显示如下所示的警告消息:

图 26.30 无法删除算法
选择 Edit... 选项会显示算法的参数对话框,这样就可以更改输入和参数值。并非模型中可用的所有输入元素都将显示为可用输入。如果在模型定义的工作流中的更高级步骤中生成的层或值导致循环依赖关系,则它们将不可用。
选择新值并单击 OK 像往常一样按按钮。模型元素之间的连接将相应地在建模器画布中更改。
这个 Add comment... 允许您向算法添加注释以更好地描述行为。
一个模型可以通过停用它的一些算法来部分运行。要执行此操作,请选择 Deactivate 右键单击算法元素时出现的上下文菜单中的选项。选定的算法以及模型中依赖于该算法的所有算法将以灰色显示,并且不会作为模型的一部分执行。

图 26.31 带有停用算法的模型
当右键单击未激活的算法时,您将看到一个 Activate 菜单选项,您可以使用该菜单选项重新激活它。