跳转至

17 编写处理插件⚓︎

取决于你将开发的插件类型,它可能是更好的选择—作为处理算法(或者算法集合)去增加功能。这将在QGIS中提供给更好的集成,额外的功能(它可以运行在处理组件中,如建模或批处理界面运行),和更快的开发时间(处理将花费的很大一部分工作)。

为了分发这些算法,你应该创建一个新的插件,并将它们添加到处理工具箱。该插件应该包含一个算法提供者,它在插件实例化时进行注册。

17.1 从头开始创建⚓︎

从头开始创建一个插件,它包含一个算法提供者,你可以使用插件构造器,按照下列步骤操作:

  1. 安装Plugin Builder插件
  2. 使用Plugin Builder创建一个新的插件。当Plugin Builder要求你使用模板时,选择“Processing provider”。
  3. 创建的插件包含一个算法提供者。无论是提供者文件和算法文件都被完全注释,并包含有关如何修改提供者,并添加额外的算法的信息。参考它们以获取更多信息。

17.2 更新插件⚓︎

如果你想添加你现有的插件到“Processing”,你需要添加一些代码。

  1. 在你的metadata.txt,你需要添加一个变量:

    1
    hasProcessingProvider=yes
    
  2. 在Python文件中,插件使用initGui方法安装,你需要改写这样的例子:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    from qgis.core import QgsApplication
    from .processing_provider import Provider
    
    class YourPluginName():
    
        def __init__(self):
            self.provider = None
    
        def initProcessing(self):
            self.provider = Provider()
            QgsApplication.processingRegistry().addProvider(self.provider)
    
        def initGui(self):
            self.initProcessing()
    
        def unload(self):
            QgsApplication.processingRegistry().removeProvider(self.provider)
    
  3. 你可以创建一个processing_provider文件夹,其中包含三个文件

    • __init__.py没有任何东西。这是Python包所必需的。

    • provider.py 这将创建处理提供者并公开你的算法。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    from qgis.core import QgsProcessingProvider
    from .example_processing_algorithm import ExampleProcessingAlgorithm
    
    class Provider(QgsProcessingProvider):
    
        def loadAlgorithms(self, *args, **kwargs):
            self.addAlgorithm(ExampleProcessingAlgorithm())
            # 在这里添加其他算法
            # self.addAlgorithm(MyOtherAlgorithm())
    
        def id(self, *args, **kwargs):
        """插件的ID,用于标识提供者。
    
        该字符串应该是唯一的,短的,仅字符串,例如“qgis”或“gdal”。此字符串不应被翻译(localised)。
        """
        return 'yourplugin'
    
        def name(self, *args, **kwargs):
        """插件的人性化名称。
    
        该字符串应尽可能短(例如“Lastools”,而不是"Lastools version 1.0.1 64-bit"),并且需要翻译(localised)。
        """
        return self.tr('Your plugin')
    
        def icon(self):
        """应该返回用于处理工具箱中提供者的QIcon。
        """
        return QgsProcessingProvider.icon(self) 
    
    • example_processing_algorithm.py,其中包含示例算法文件。复制/粘贴模板文件中的内容,并根据需要更新它。
  4. 现在,你可以在QGIS中重新加载插件,你应该可以在处理工具箱和模型中看到你的示例脚本。