プロセシングプラグインとは
QGISでは、QtDesignerを用いてダイアログ形式のプラグインを作成することのほかに、プロセシング形式のプラグインを作成することが可能です。
プロセシングプラグインで作成することにより、グラフィカルモデラーに組み込むことができたり、バッチ処理で複数のファイルを一括で処理することができるなど、多くの利点があります。
また開発者目線では、UIをプロセシングの型にあわせて作成するだけでよいので、開発時間の短縮も期待できるでしょう。
QGIS公式ドキュメント | プロセッシングプラグインを書く
弊社で開発しオープンソースとして公開している「登記所備付地図データ」をQGISで読み込むためのプラグインについては、プロセシング形式で作成しています。
https://github.com/MIERUNE/qgis-mojxml-plugin
この記事では、主にプロセシングプラグインで追加することができるパラメータについて紹介します。
なお、この記事の執筆にあたっては、以下の記事を参考にさせていただきました。
QGIS のプロセシングプラグインを書いてみた - Qiita
パラメータの追加・参照
initAlgorithm
内で、addParameter
メソッドでパラメータを追加する。下記はインプットレイヤを設定するパラメータ。パラメータにより引数は異なる。
def initAlgorithm(self, config=None):
self.addParameter(
QgsProcessingParameterMapLayer(
# コード内でパラメータを識別するために使用する名称
'MapLayer',
# UIに表示する文字列
self.tr('QgsProcessingParameterMapLayer'),
# Trueに設定されている場合、そのパラメータの設定が任意となる。
optional=True
)
)
属性を設定するパラメータの場合はレイヤと紐づける必要があるため、parentLayerParameterName
で親となるパラメータの名称を設定する。
def initAlgorithm(self, config=None):
# レイヤの設定
self.addParameter(
QgsProcessingParameterFeatureSource(
'FeatureSource',
self.tr('QgsProcessingParameterFeatureSource'),
optional=True
)
)
# 属性の設定
self.addParameter(
QgsProcessingParameterField(
'Field',
self.tr('QgsProcessingParameterField'),
# 親レイヤのパラメータの名称を指定
parentLayerParameterName='FeatureSource',
optional=True
)
)
processAlgorithm
内に実行時の処理を記載し、パラメータを参照する場合は、parameterAsxxxx
メソッドを使用する。
def processAlgorithm(self, parameters, context, feedback):
# QgsProcessingParameterFileの場合
filename = self.parameterAsFile(parameters, self.INPUT, context)
input_layer = QgsVectorLayer(filename, 'input_layer', 'ogr')
その他のパラメータの参照はこちらのページを参照
Class: QgsProcessingParameters
パラメータ一覧
Welcome to the QGIS Python API documentation project
- Class: QgsProcessingParameterAggregate
- Class: QgsProcessingParameterAnnotationLayer
- Class: QgsProcessingParameterAuthConfig
- Class: QgsProcessingParameterBand
- Class: QgsProcessingParameterBoolean
- Class: QgsProcessingParameterColor
- Class: QgsProcessingParameterCoordinateOperation
- Class: QgsProcessingParameterCrs
- Class: QgsProcessingParameterDatabaseSchema
- Class: QgsProcessingParameterDatabaseTable
- Class: QgsProcessingParameterDateTime
- Class: QgsProcessingParameterDefinition
- Class: QgsProcessingParameterDistance
- Class: QgsProcessingParameterDuration
- Class: QgsProcessingParameterDxfLayers
- Class: QgsProcessingParameterEnum
- Class: QgsProcessingParameterExpression
- Class: QgsProcessingParameterExtent
- Class: QgsProcessingParameterFeatureSink
- Class: QgsProcessingParameterFeatureSource
- Class: QgsProcessingParameterField
- Class: QgsProcessingParameterFieldMapping
- Class: QgsProcessingParameterFile
- Class: QgsProcessingParameterFileDestination
- Class: QgsProcessingParameterFolderDestination
- Class: QgsProcessingParameterGeometry
- Class: QgsProcessingParameterLayout
- Class: QgsProcessingParameterLayoutItem
- Class: QgsProcessingParameterLimitedDataTypes
- Class: QgsProcessingParameterMapLayer
- Class: QgsProcessingParameterMapTheme
- Class: QgsProcessingParameterMatrix
- Class: QgsProcessingParameterMeshDatasetGroups
- Class: QgsProcessingParameterMeshDatasetTime
- Class: QgsProcessingParameterMeshLayer
- Class: QgsProcessingParameterMultipleLayers
- Class: QgsProcessingParameterNumber
- Class: QgsProcessingParameterPoint
- Class: QgsProcessingParameterPointCloudAttribute
- Class: QgsProcessingParameterPointCloudDestination
- Class: QgsProcessingParameterPointCloudLayer
- Class: QgsProcessingParameterProviderConnection
- Class: QgsProcessingParameterRange
- Class: QgsProcessingParameterRasterDestination
- Class: QgsProcessingParameterRasterLayer
- Class: QgsProcessingParameterScale
- Class: QgsProcessingParameterString
- Class: QgsProcessingParameterTinInputLayers
- Class: QgsProcessingParameterType
- Class: QgsProcessingParameterVectorDestination
- Class: QgsProcessingParameterVectorLayer
- Class: QgsProcessingParameterVectorTileDestination
- Class: QgsProcessingParameterVectorTileWriterLayers
レイヤの入力
QgsProcessingParameterFile
self.addParameter(
QgsProcessingParameterFile(
'File',
self.tr('QgsProcessingParameterFile'),
optional=True
)
)
Class: QgsProcessingParameterFile
QgsProcessingParameterMapLayer
self.addParameter(
QgsProcessingParameterMapLayer(
'MapLayer',
self.tr('QgsProcessingParameterMapLayer'),
optional=True
)
)
Class: QgsProcessingParameterMapLayer
QgsProcessingParameterFeatureSource
self.addParameter(
QgsProcessingParameterFeatureSource(
'FeatureSource',
self.tr('QgsProcessingParameterFeatureSource'),
optional=True
)
)
Class: QgsProcessingParameterFeatureSource
QgsProcessingParameterVectorLayer
インプットレイヤ。ベクタレイヤのみが対象。
公式ドキュメントによると「**[QgsProcessingParameterFeatureSource](https://qgis.org/pyqgis/master/core/QgsProcessingParameterFeatureSource.html#module-QgsProcessingParameterFeatureSource)の
**使用がおすすめ」とのこと。
self.addParameter(
QgsProcessingParameterVectorLayer(
'VectorLayer',
self.tr('QgsProcessingParameterVectorLayer'),
optional=True
)
)
Class: QgsProcessingParameterVectorLayer
QgsProcessingParameterMultipleLayers
複数のレイヤのインプット。ベクターレイヤのみが対象。
self.addParameter(
QgsProcessingParameterMultipleLayers(
'MultipleLayers',
self.tr('QgsProcessingParameterMultipleLayers'),
optional=True
)
)
Class: QgsProcessingParameterMultipleLayers
QgsProcessingParameterRasterLayer
インプットレイヤ。ラスターレイヤのみが対象。
self.addParameter(
QgsProcessingParameterRasterLayer(
'RasterLayer',
self.tr('QgsProcessingParameterRasterLayer'),
optional=True
)
)
QgsProcessingParameterRasterLayer
QgsProcessingParameterMeshLayer
インプットレイヤ。メッシュレイヤのみが対象。
self.addParameter(
QgsProcessingParameterMeshLayer(
'MeshLayer',
self.tr('QgsProcessingParameterMeshLayer'),
optional=True
)
)
Class: QgsProcessingParameterMeshLayer
属性関係
QgsProcessingParameterField
ベクタレイヤの属性を設定するパラメータ
# レイヤの設定
self.addParameter(
QgsProcessingParameterFeatureSource(
'FeatureSource',
self.tr('QgsProcessingParameterFeatureSource'),
optional=True
)
)
# 属性の設定
self.addParameter(
QgsProcessingParameterField(
'Field',
self.tr('QgsProcessingParameterField'),
# 親レイヤのパラメータの名称を指定
parentLayerParameterName='FeatureSource',
optional=True
)
)
QgsProcessingParameterFieldの引数にallowMultiple=True
を加えることで属性の複数選択が可能になる。
QgsProcessingParameterBand
ラスターのバンドの設定
# ラスターのインプット
self.addParameter(
QgsProcessingParameterRasterLayer(
'RasterLayer',
self.tr('QgsProcessingParameterRasterLayer'),
optional=True
)
)
# バンド
self.addParameter(
QgsProcessingParameterBand(
'Band',
self.tr('QgsProcessingParameterBand'),
# 親レイヤのパラメータの名称を指定
parentLayerParameterName='RasterLayer',
optional=True
)
)
レイヤの出力
QgsProcessingParameterFeatureSink
アルゴリズムで作成された地物の出力先を指定するパラメータ。
self.addParameter(
QgsProcessingParameterFeatureSink(
'FeatureSink',
self.tr('QgsProcessingParameterFeatureSink'),
optional=True
)
)
Class: QgsProcessingParameterFeatureSink
QgsProcessingParameterVectorDestination
アルゴリズムで作成されたベクタレイヤーの出力先を指定するパラメータ。ドキュメントによれば、「より柔軟な**[QgsProcessingParameterFeatureSink](https://qgis.org/pyqgis/master/core/QgsProcessingParameterFeatureSink.html#qgis.core.QgsProcessingParameterFeatureSink)
**使用することを検討してください。」とのこと。
self.addParameter(
QgsProcessingParameterVectorDestination(
'VectorDestination',
self.tr('QgsProcessingParameterVectorDestination'),
optional=True
)
)
QgsProcessingParameterRasterDestination
アルゴリズムで作成されたラスタレイヤーの出力先を指定するパラメータ。
self.addParameter(
QgsProcessingParameterFileDestination(
'FileDestination',
self.tr('QgsProcessingParameterFileDestination'),
optional=True
)
)
Class: QgsProcessingParameterRasterDestination
QgsProcessingParameterFileDestination
アルゴリズムで作成されたファイルの出力先を指定するためのパラメータ。
self.addParameter(
QgsProcessingParameterFileDestination(
'FileDestination',
self.tr('QgsProcessingParameterFileDestination'),
optional=True
)
)
QgsProcessingParameterFolderDestination
アルゴリズムで作成されたフォルダや、アルゴリズム内で新規ファイルを作成する際に使用するフォルダの出力先を指定するためのパラメータ。
self.addParameter(
QgsProcessingParameterFolderDestination(
'FolderDestination',
self.tr('QgsProcessingParameterFolderDestination'),
optional=True
)
)
Class: QgsProcessingParameterFolderDestination
各種設定(一般)
QgsProcessingParameterBoolean
ブーリアンのパラメータ。
self.addParameter(
QgsProcessingParameterBoolean(
'Boolean',
self.tr('QgsProcessingParameterBoolean'),
optional=True
)
)
Class: QgsProcessingParameterBoolean
QgsProcessingParameterEnum
あらかじめ定義された値からプルダウンで選択。
self.addParameter(
QgsProcessingParameterEnum(
'Enum',
self.tr('QgsProcessingParameterEnum'),
options=[self.tr('札幌'), self.tr('東京'), self.tr('名古屋')],
defaultValue=0,
optional=True
)
)
self.addParameter(
QgsProcessingParameterEnum(
'EnumBox',
self.tr('QgsProcessingParameterEnum [widget_wrapper: checkboxes]'),
options=[self.tr('札幌'), self.tr('東京'), self.tr('名古屋')],
defaultValue=1,
optional=True
)
)
self.parameterDefinition('EnumBox').setMetadata(
{
'widget_wrapper': {
'useCheckBoxes': True,
'columns': 3
}
}
)
Class: QgsProcessingParameterEnum
QgsProcessingParameterNumber
数値パラメータ
self.addParameter(
QgsProcessingParameterNumber(
'Number',
self.tr('QgsProcessingParameterNumber'),
optional=True
)
)
メタデータを設定することで小数値を設定できる。
self.addParameter(
QgsProcessingParameterNumber(
'Number',
self.tr('QgsProcessingParameterNumber'),
type=QgsProcessingParameterNumber.Double,
optional=True
)
)
self.parameterDefinition('Number').setMetadata(
{
'widget_wrapper': {
'decimals': 2
}
}
)
Class: QgsProcessingParameterNumber
QgsProcessingParameterRange
self.addParameter(
QgsProcessingParameterRange(
'Range',
self.tr('QgsProcessingParameterRange'),
optional=True
)
)
Class: QgsProcessingParameterRange
QgsProcessingParameterString
self.addParameter(
QgsProcessingParameterString(
'String',
self.tr('QgsProcessingParameterString'),
optional=True
)
)
メタデータの設定により入力を制限できる(QgsProcessingParameterEnum を使えばいい気がする)
self.parameterDefinition('String').setMetadata(
{'widget_wrapper':
{'value_hints': ['Inkjet printer', 'Laser printer'] }
})
Class: QgsProcessingParameterString
QgsProcessingParameterDateTime
日付のパラメータ
Class: QgsProcessingParameterDateTime
QgsProcessingParameterDuration
self.addParameter(
QgsProcessingParameterDuration(
'Duration',
self.tr('QgsProcessingParameterDuration'),
optional=True
)
)
QgsProcessingParameterColor
カラーパラメータ
self.addParameter(
QgsProcessingParameterColor(
'Color',
self.tr('QgsProcessingParameterColor'),
optional=True
)
)
各種設定(GIS)
QgsProcessingParameterCrs
self.addParameter(
QgsProcessingParameterCrs(
'Crs',
self.tr('QgsProcessingParameterCrs'),
optional=True
)
)
Class: QgsProcessingParameterCrs
QgsProcessingParameterPoint
特定の座標を設定するパラメータ。•••
をクリックするとマップから指定した地点の座標を設定できる。
self.addParameter(
QgsProcessingParameterPoint(
'Point',
self.tr('QgsProcessingParameterPoint'),
optional=True
)
)
Class: QgsProcessingParameterPoint
QgsProcessingParameterExtent
右のカーソルボタンをクリックすると次から範囲を設定できる。
self.addParameter(
QgsProcessingParameterExtent(
'Extent',
self.tr('QgsProcessingParameterExtent'),
optional=True
)
)
QgsProcessingParameterScale
スケールを設定するパラメータ
self.addParameter(
QgsProcessingParameterScale(
'Scale',
self.tr('QgsProcessingParameterScale'),
optional=True
)
)
Class: QgsProcessingParameterScale
QgsProcessingParameterDistance
距離パラメータ
self.addParameter(
QgsProcessingParameterDistance(
'Distance',
self.tr('QgsProcessingParameterDistance'),
optional=True
)
)
Class: QgsProcessingParameterDistance
QgsProcessingParameterAggregate
属性の集計用パラメータ。
self.addParameter(
QgsProcessingParameterAggregate(
'Aggregate',
self.tr('QgsProcessingParameterColor'),
parentLayerParameterName='FeatureSource',
optional=True
)
)