4. 模型输入参数设计

在QGIS图形化模型构建器(Graphical Modeler)中,输入参数是模型与外部数据之间的“接口”。批量制图的核心思想,是把所有会随图幅、行政区、时间或数据集变化的内容,从模型内部“固定值”提升为“输入参数”,让同一个模型可以被反复调用、批量执行。参数设计得好不好,直接决定了模型能否复用、能否被批处理工具识别、能否在QGIS的“以批处理方式运行”对话框中正确展开。

本节围绕“类型选择”和“默认值设置”两条主线展开,并结合批量制图的典型场景说明如何为可变参数留出正确的接口。

一、先分清“参数”与“固定值”

模型构建器中的每个算法输入,都可以选择“值”或“来自输入”。前者是写死在模型里的常量,后者才是一个真正的输入参数。批量制图时,凡是需要按图幅变化的量——例如制图范围图层、标注字段、标题字符串、输出目录、比例尺分母、坐标系EPSG代码——都应设为“来自输入”。而像缓冲区距离的固定容差、样式文件路径这类不随批次变化的量,可以保留为固定值,减少参数数量,降低批处理界面的复杂度。

一个实用的判断标准是:如果这个值在批量执行时需要为每一行填写不同的内容,它就必须是参数;如果所有行都相同,就应固定,避免在批处理表格中产生大量重复列。

二、七类常用输入参数的类型选择

QGIS模型输入参数的类型由“输入类型”下拉框决定,选择错误会导致参数无法连接或批处理时无法解析。下表给出批量制图中最常见的类型及其适用场景。

参数类型 典型用途 批量制图中的注意事项
矢量图层(Vector Layer) 制图范围、掩膜、标注要素来源 需限定几何类型与是否允许多图层;批量时每行可指定不同图层
栅格图层(Raster Layer) 底图、DEM、影像 注意波段选择;批量时通常固定底图,仅范围变化
表格(Table) 属性表、统计表、图例数据 与矢量图层区分,表格无几何;用于连接或字段取值
数值(Number) 比例尺分母、缓冲区距离、图幅宽高 设置最小值/最大值与小数位,防止批处理输入非法值
字符串(String) 图名、标题、输出文件名前缀 可配合表达式拼接;注意文件名非法字符
字段(Field) 标注字段、分类字段、排序字段 必须绑定到某个父图层参数,否则批处理时无法枚举字段
坐标系(CRS) 输出工程坐标系、投影转换目标 批量时通常固定;若按图幅变化需逐行指定EPSG

其中“字段”参数最容易出错。字段参数必须通过“父图层”属性绑定到一个矢量图层参数,模型才知道从哪个图层的属性表中读取字段列表。若父图层未设置,字段参数在批处理界面会显示为空,导致标注或分类失败。同理,坐标系参数若用于投影算法,应确认算法本身是否接受CRS输入,部分算法只接受目标EPSG代码而非CRS对象。

三、默认值设置:让模型“开箱可用”

默认值不是可有可无的装饰。合理的默认值能让模型在首次打开时即可运行,也能在批处理界面中作为“填充整列”的基准值。设置默认值时应注意以下几点:

  • 数值参数:给出符合业务范围的默认值,并设置最小值与最大值。例如比例尺分母默认50000,范围1000~1000000;缓冲区距离默认1000米,最小0。
  • 字符串参数:默认值应是一个合法示例,如“图幅_”作为文件名前缀,避免默认空串导致输出文件名为空。
  • 矢量/栅格参数:默认值可留空,但应在模型说明中写明期望的数据类型与几何类型限制,避免用户误选点图层作为面状掩膜。
  • 字段参数:默认值通常留空,由父图层动态决定;若模型面向固定数据结构,可指定默认字段名,但需保证父图层确实存在该字段。
  • 坐标系参数:默认值建议设为项目常用CRS,如EPSG:4490(CGCS2000地理坐标)或EPSG:4547(CGCS2000 3度带投影),并在参数描述中注明。
默认值设置完成后,建议在模型构建器中直接点击“运行”做一次单次验证,确认所有参数都能被算法正确接收,再进入批处理环节。单次验证通过是批量执行前的必要检查。

四、为批量制图预留“可变参数”的组合方式

批量制图的典型链路是:按行政区或图幅遍历 → 设置制图范围 → 应用标注字段与标题 → 输出PDF/图片。对应到模型参数,应至少暴露四类可变参数:范围图层(矢量)、标注字段(字段,父图层为范围图层)、图名字符串(字符串)、输出目录或文件名前缀(字符串)。比例尺分母与输出CRS通常作为固定值或少量可变参数保留。

下图展示了一个批量制图模型中输入参数与算法之间的连接关系,以及哪些参数在批处理时逐行变化、哪些保持固定。

批量制图模型的输入参数连接关系 输入参数(模型接口) 范围图层(矢量) 逐行变化 标注字段(字段) 逐行变化 图名字符串(字符串) 逐行变化 输出目录(字符串) 逐行变化 比例尺分母(数值) 固定 50000 输出坐标系(CRS) 固定 EPSG:4547 模型内算法 按范围设置地图 设置地图范围与比例 设置标注字段 绑定父图层与字段 设置标题文字 写入图名 导出布局为PDF 按前缀命名输出 重投影输出 应用目标CRS 输出结果 图幅A.pdf 范围A + 字段A 图幅B.pdf 范围B + 字段B 图幅C.pdf 范围C + 字段C 统一比例尺与坐标系 保证成图规格一致 实线:逐行变化的参数 虚线:固定值参数

图中实线表示批处理时逐行变化的参数,虚线表示在整批任务中保持固定的参数。可以看到,范围图层、标注字段、图名和输出目录构成“逐行变化”的核心四元组,而比例尺分母与输出坐标系作为固定值,保证所有图幅的成图规格一致。这种“可变 + 固定”的组合,正是批量制图参数设计的基本结构。

五、参数校验与常见问题

参数设计完成后,应做三项检查。第一,检查字段参数的父图层是否已正确绑定,否则批处理界面字段列为空。第二,检查数值参数的最小值/最大值是否覆盖批处理输入范围,例如比例尺分母若限制为10000~100000,而某行输入500000,批处理会直接报错。第三,检查字符串参数是否用于文件名,若包含“/”“:”“*”等非法字符,导出会失败,建议在模型内用表达式替换或统一使用下划线。

不要把“输出目录”和“输出文件名”混为一个字符串参数。目录用于定位,文件名用于命名,二者分开设置才能在批处理中灵活组合,也便于后续按目录归档。若必须合并,应在模型内用表达式拼接并做合法性校验。

最后需要强调,参数设计的目标不是“参数越多越好”,而是“恰好暴露批量变化所需的最小集合”。参数过多会让批处理表格臃肿、易填错;参数过少则模型无法复用。以本节示例而言,四个逐行变化参数加两个固定参数,已经能够覆盖按行政区批量出图的主要需求,是一个可落地、可复现的参数接口设计。