添加草地工具

Grass模块可以从QGIS运行 GRASS Tools 如果qgis是从草壳开始的,或者如果草地图集是从qgis打开的。这些模块仅使用草地数据。

修改菜单和添加新模块很容易,因为菜单和模块都是在XML配置文件中定义的。下面介绍如何编写新模块和修改菜单树。

模块配置

背景

模块的“选项”选项卡中显示的每个模块的选项是根据QGM(QGIS Grass模块)文件中的定义和Grass模块或Grass脚本中的选项定义(Grass模块选项)的组合创建的。由于QGM中的每个选项都与一个(或多个)GMO相关联,因此如果不需要咨询GMO,它通常是有用的。gmo由grass模块输出,如果使用*--interface-description_*选项运行,则输出为XML格式,例如:

r.to.vect --interface-description

Some GRASS modules have too many options which can be confusing for beginners. In QGM it is possible to define only some of them and possibly set some default values and/or hide some options with certain value. That means that more QGIS-GRASS modules can be defined for each GRASS module. For example the module r.to.vect was divided into three QGIS-GRASS modules with predefined "feature" option. The QGM definition is written in XML format file with extension .qgm, one for each QGIS-GRASS module. Configuration files are stored in _*qgis/src/plugins/grass/modules*_ directory and installed in _*share/qgis/grass/modules*_ directory. The name of the file should start with GRASS module name + a word describing the specific task. For example, the module which extracts vector lines from raster is called r.to.vect.line.qgm.

以下是配置文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE qgisgrassmodule SYSTEM "http://mrcc.com/qgisgrassmodule.dtd">
<qgisgrassmodule label="Generate aspect map from DEM" module="r.slope.aspect">
       <option key="elevation" />
       <option key="aspect" />
</qgisgrassmodule>

qgisgrassmodule标记属性

  • label ---菜单树中使用的说明

  • module ---Grass模块可执行文件或脚本的名称。

选项标签

每个qgisgrassmodule标记可以包含一个或多个选项标记:

  • option ---对应于gmo参数标签,示例:

<option key="elevation" />
  • flag ---对应于gmo标志标签,例如:

<flag key="o" answer="on" hidden="yes" />
  • field ---对于矢量层定义属性字段,该选项创建为具有可用字段的组合框。例如(v.to.db.qgm):

<field key="column" layer="map" type="integer,double" label="Attribute field" />
  • selection ---这是一种非常有趣和有用的选择。它允许使用qgis界面定义草地矢量类别列表。可以使用“选择要素”工具或在属性表中选择要素(及其类别,草要素ID等效)。类别列表将动态更新。示例(v.extract.list.qgm):

<selection key="list" layerid="input" label="Cats" />

通用选项/标记属性

  • key ---在转基因生物中模块选项的名称。

  • answer ---默认值(覆盖gmo默认值);值“on”将打开标志。

  • hidden ---该选项不会出现在对话框中,但模块将使用该选项运行(hidden=“yes”)。

  • label ---选项标签

  • advanced ---“是”或“否”,默认为“否”。如果设置为“是”,选项/标志将添加到初始隐藏的高级选项面板,并且“显示高级选项>>”按钮将显示在简单(基本、标准)选项下。

  • version_min ---此选项/标志有效的最低草版本

  • version_max ---此选项/标志有效的最大草版本

选项标记特定属性

  • typeoption ---此选项可与矢量层一起定义矢量输入类型选项的名称,模块运行时,该选项将使用所选矢量层的类型。例如(v.overlay.or.qgm):

    <option key="ainput" typeoption="atype" layeroption="alayer" typemask="area,line" />
    

    这意味着,如果从该选项的组合框中选择一个图层,“ATYPE*选项”将自动设置为该图层的类型,因此不必添加“ATYPE*”。

  • layeroption ---相当于层的typeoption。

  • typmask ---对于矢量输入选项,定义允许的类型。输入中只显示一个已定义类型的图层。例如,请参见v.overlay.or.qgm。

字段标记特定属性

  • layer ---定义该字段应依赖的向量的选项的关键属性

  • type ---定义应添加到字段组合框中的属性字段的类型,例如

    <field key="column" layer="map" type="integer,double" label="Attribute field" />
    

    这意味着只有整数和双精度类型的属性字段才会出现在组合框中。例如,参见v.what.vect(2个不同的向量)。

在幕后

qgis-grass模块实现的思想是使用来自gmo的最大信息,并且只简化接口。这里描述了一些规则如何使用来自GMO的信息,如果不是所有信息都在GMO中定义,则按哪个顺序使用。

  • label ---如果在QGM中定义了label属性,则将其用作选项标签;如果未定义,则使用gmo选项标签标签;如果未定义,则使用gmo选项描述标签。

  • tooltip ---(见鼠标上方的选项)如果定义了标签(在QGM或GMO中),并且描述是在GMO中定义的(因此标签和描述不同),则将使用GMO描述标记作为工具提示

  • multiple values label---如果一个选项是类型multiple,并且定义了可能值的列表(比如v.Distance的upload选项),并且在gmo中为value标签定义了description标签,那么它将用作复选框标签。

图片

Each module must be represented also by a picture/icon which symbolizes the modules functionality. The pictures are also stored in plugins/grass/modules as SVG (.svg) or PNG (.png) files.

目前,图片支持3种模式:

  • 1幅图

  • 2张图片---QGIS将创建图标:1->2

  • 3张图片---QGIS将创建图标:1+2->3

图片的名称以qgis-grass模块名称开头,该模块名称是附加的图片编号,例如:v.overlay.and.1.svg、v.overlay.and.2.svg、v.overlay.and.3.svg。可以结合SVG和PNG图片。

可以使用qgis生成SVG和PNG图片 专题地图编辑器. PNG图像的大小应大于预期的图标大小,因为它将在稍后自动生成的文档中使用,其中图片将以较大的大小使用。

qgis草脚本

Because it can take long time until a new script is added to stable GRASS release and because some scripts can be useful only for QGIS GUI interface it is possible to add a 'GRASS' script to QGIS. The scripts should follow general requirements for GRASS scripts and they are located in qgis/src/plugins/grass/scripts.

新模块的一般规则

GRASS Tools 主要面向初学者和经验不足的用户。基本规则如下:

  • 每个模块应该有3个或更少的选项;如果需要添加更多选项,应该事先讨论。

  • 模块定义应该是健壮的,这样就不允许用户使用错误的选项运行模块。如果还不支持某些类型的选项,则不应将模块添加到菜单中

模块描述的具体规则

  • 不要让第三个人使用动词,例如“导出栅格”而不是“导出栅格”

  • 避免不必要的“地图”、“图层”和“文件”,例如“导出栅格”而不是“导出栅格地图图层”

  • 避免不必要的“草”,例如“导出栅格”而不是“导出草栅格”

  • 避免“a_an”,例如“导出栅格”,而不是“导出栅格”

  • 避免使用填充词,例如“导出栅格”而不是“允许导出栅格”

  • 避免“转换”:使用“导出”或“导入”。转换应用于内部草地转换(例如从栅格到矢量)

  • 缩写词应为大写,例如,ASCII而不是ASCII

  • 如有疑问,请检查现有的类似插件以保持一致性。

当前无法使用的选项

从技术上讲,可以使用任何选项。但是,有些选项还没有得到很好的支持,例如那些依赖于其他选项的选项。以下是一个尚未得到很好支持的选项列表(可能不完整),因此目前不应使用:

  • OGR输入DSN/层(v.in.ogr)

可添加的模块

大多数模块都已添加。如果您需要额外的模块,请写信至QGIS开发邮件列表,并在后面列出您认为最重要的模块。

您应该发布一个新的QGIS-Grass模块的名称、Grass模块的名称以及要使用的选项。例如:

r.to.vect.area: r.to.vect input output feature=area

另见此处讨论 GRASS-QGIS relevant module list .

要弃用的模块

在下面列出应删除的模块,并说明此建议的理由(例如:一些与投影相关的模块很难理解,并且没有一般用途)。请注意:有些模块没有经过彻底测试。请测试它们,如果发现任何问题,请将其报告给Redmine(更好的方法是:自己修复并发送补丁)。