LoginSignup
8
2
お題は不問!Qiita Engineer Festa 2023で記事投稿!

QGISにおけるプロセシングプラグインのパラメータ

Last updated at Posted at 2023-07-21

プロセシングプラグインとは

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

レイヤの入力

QgsProcessingParameterFile

外部のレイヤ・フォルダを選択。
Untitled 1.png

self.addParameter(
            QgsProcessingParameterFile(
                'File',
                self.tr('QgsProcessingParameterFile'),
                optional=True
            )
        )

Class: QgsProcessingParameterFile

QgsProcessingParameterMapLayer

インプットレイヤ。すべての種類のレイヤが対象
Untitled 3.png

self.addParameter(
            QgsProcessingParameterMapLayer(
                'MapLayer',
                self.tr('QgsProcessingParameterMapLayer'),
                optional=True
            )
        )

Class: QgsProcessingParameterMapLayer

QgsProcessingParameterFeatureSource

インプットレイヤ。ベクタレイヤのみが対象
Untitled 4.png

self.addParameter(
            QgsProcessingParameterFeatureSource(
                'FeatureSource',
                self.tr('QgsProcessingParameterFeatureSource'),
                optional=True
            )
        )

Class: QgsProcessingParameterFeatureSource

QgsProcessingParameterVectorLayer

インプットレイヤ。ベクタレイヤのみが対象。

公式ドキュメントによると「**[QgsProcessingParameterFeatureSource](https://qgis.org/pyqgis/master/core/QgsProcessingParameterFeatureSource.html#module-QgsProcessingParameterFeatureSource)の**使用がおすすめ」とのこと。

Untitled 5.png

self.addParameter(
            QgsProcessingParameterVectorLayer(
                'VectorLayer',
                self.tr('QgsProcessingParameterVectorLayer'),
                optional=True
            )
        )

Class: QgsProcessingParameterVectorLayer

QgsProcessingParameterMultipleLayers

複数のレイヤのインプット。ベクターレイヤのみが対象。

Untitled 6.png

Untitled 7.png

self.addParameter(
            QgsProcessingParameterMultipleLayers(
                'MultipleLayers',
                self.tr('QgsProcessingParameterMultipleLayers'),
                optional=True
            )
        )

Class: QgsProcessingParameterMultipleLayers

QgsProcessingParameterRasterLayer

インプットレイヤ。ラスターレイヤのみが対象。

Untitled 8.png

self.addParameter(
            QgsProcessingParameterRasterLayer(
                'RasterLayer',
                self.tr('QgsProcessingParameterRasterLayer'),
                optional=True
            )
        )

QgsProcessingParameterRasterLayer

QgsProcessingParameterMeshLayer

インプットレイヤ。メッシュレイヤのみが対象。

image.png

self.addParameter(
            QgsProcessingParameterMeshLayer(
                'MeshLayer',
                self.tr('QgsProcessingParameterMeshLayer'),
                optional=True
            )
        )

Class: QgsProcessingParameterMeshLayer

属性関係

QgsProcessingParameterField

ベクタレイヤの属性を設定するパラメータ

Untitled 10.png

# レイヤの設定
self.addParameter(
            QgsProcessingParameterFeatureSource(
                'FeatureSource',
                self.tr('QgsProcessingParameterFeatureSource'),
                optional=True
            )
        )

# 属性の設定
self.addParameter(
            QgsProcessingParameterField(
                'Field',
                self.tr('QgsProcessingParameterField'),
								# 親レイヤのパラメータの名称を指定
                parentLayerParameterName='FeatureSource',
                optional=True
            )
        )

QgsProcessingParameterFieldの引数にallowMultiple=Trueを加えることで属性の複数選択が可能になる。

Untitled 11.png

QgsProcessingParameterBand

ラスターのバンドの設定

Untitled 12.png

# ラスターのインプット
self.addParameter(
            QgsProcessingParameterRasterLayer(
                'RasterLayer',
                self.tr('QgsProcessingParameterRasterLayer'),
                optional=True
            )
        )

# バンド
self.addParameter(
            QgsProcessingParameterBand(
                'Band',
                self.tr('QgsProcessingParameterBand'),
								# 親レイヤのパラメータの名称を指定
                parentLayerParameterName='RasterLayer',
                optional=True
            )
        )

レイヤの出力

QgsProcessingParameterFeatureSink

アルゴリズムで作成された地物の出力先を指定するパラメータ。

image.png

self.addParameter(
            QgsProcessingParameterFeatureSink(
                'FeatureSink',
                self.tr('QgsProcessingParameterFeatureSink'),
                optional=True
            )
        )

Class: QgsProcessingParameterFeatureSink

QgsProcessingParameterVectorDestination

アルゴリズムで作成されたベクタレイヤーの出力先を指定するパラメータ。ドキュメントによれば、「より柔軟な**[QgsProcessingParameterFeatureSink](https://qgis.org/pyqgis/master/core/QgsProcessingParameterFeatureSink.html#qgis.core.QgsProcessingParameterFeatureSink)**使用することを検討してください。」とのこと。

Untitled 14.png

self.addParameter(
            QgsProcessingParameterVectorDestination(
                'VectorDestination',
                self.tr('QgsProcessingParameterVectorDestination'),
                optional=True
            )
        )

QgsProcessingParameterRasterDestination

アルゴリズムで作成されたラスタレイヤーの出力先を指定するパラメータ。

Untitled 15.png

self.addParameter(
            QgsProcessingParameterFileDestination(
                'FileDestination',
                self.tr('QgsProcessingParameterFileDestination'),
                optional=True
            )
        )

Class: QgsProcessingParameterRasterDestination

QgsProcessingParameterFileDestination

アルゴリズムで作成されたファイルの出力先を指定するためのパラメータ。

Untitled 16.png

self.addParameter(
            QgsProcessingParameterFileDestination(
                'FileDestination',
                self.tr('QgsProcessingParameterFileDestination'),
                optional=True
            )
        )

QgsProcessingParameterFolderDestination

アルゴリズムで作成されたフォルダや、アルゴリズム内で新規ファイルを作成する際に使用するフォルダの出力先を指定するためのパラメータ。

Untitled 17.png

self.addParameter(
            QgsProcessingParameterFolderDestination(
                'FolderDestination',
                self.tr('QgsProcessingParameterFolderDestination'),
                optional=True
            )
        )

Class: QgsProcessingParameterFolderDestination

各種設定(一般)

QgsProcessingParameterBoolean

ブーリアンのパラメータ。

Untitled 18.png

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
    )
)

Untitled 19.png

image.png

チェックボックス形式にもできる
Untitled 21.png

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

数値パラメータ

Untitled 22.png

self.addParameter(
            QgsProcessingParameterNumber(
                'Number',
                self.tr('QgsProcessingParameterNumber'),
                optional=True
            )
        )

メタデータを設定することで小数値を設定できる。

image.png

self.addParameter(
      QgsProcessingParameterNumber(
          'Number',
          self.tr('QgsProcessingParameterNumber'),
          type=QgsProcessingParameterNumber.Double,
          optional=True
          )
      )
  self.parameterDefinition('Number').setMetadata(
      {
      'widget_wrapper': {
          'decimals': 2
          }
      }
)

Class: QgsProcessingParameterNumber

QgsProcessingParameterRange

数値の範囲のパラメータ
Untitled 24.png

self.addParameter(
            QgsProcessingParameterRange(
                'Range',
                self.tr('QgsProcessingParameterRange'),
                optional=True
            )
        )

Class: QgsProcessingParameterRange

QgsProcessingParameterString

任意の文字列を入力することができるパラメータ
image.png

self.addParameter(
            QgsProcessingParameterString(
                'String',
                self.tr('QgsProcessingParameterString'),
                optional=True
            )
        )

メタデータの設定により入力を制限できる(QgsProcessingParameterEnum を使えばいい気がする)

Untitled 26.png

self.parameterDefinition('String').setMetadata( 
            {'widget_wrapper':
                {'value_hints': ['Inkjet printer', 'Laser printer'] }
                })

Class: QgsProcessingParameterString

QgsProcessingParameterDateTime

日付のパラメータ

Untitled 27.png

Class: QgsProcessingParameterDateTime

QgsProcessingParameterDuration

時間量のパラメータ
Untitled 28.png

self.addParameter(
            QgsProcessingParameterDuration(
                'Duration',
                self.tr('QgsProcessingParameterDuration'),
                optional=True
            )
        )

QgsProcessingParameterColor

カラーパラメータ

Untitled 29.png
Untitled 30.png

self.addParameter(
            QgsProcessingParameterColor(
                'Color',
                self.tr('QgsProcessingParameterColor'),
                optional=True
            )
        )

各種設定(GIS)

QgsProcessingParameterCrs

CRSを設定するパラメータ
Untitled 31.png

self.addParameter(
            QgsProcessingParameterCrs(
                'Crs',
                self.tr('QgsProcessingParameterCrs'),
                optional=True
            )
        )

Class: QgsProcessingParameterCrs

QgsProcessingParameterPoint

特定の座標を設定するパラメータ。•••をクリックするとマップから指定した地点の座標を設定できる。

Untitled 32.png

self.addParameter(
            QgsProcessingParameterPoint(
                'Point',
                self.tr('QgsProcessingParameterPoint'),
                optional=True
            )
        )

Class: QgsProcessingParameterPoint

QgsProcessingParameterExtent

矩形のマップ範囲を設定するパラメータ
Untitled 33.png

右のカーソルボタンをクリックすると次から範囲を設定できる。

Untitled 34.png

self.addParameter(
            QgsProcessingParameterExtent(
                'Extent',
                self.tr('QgsProcessingParameterExtent'),
                optional=True
            )
        )

QgsProcessingParameterScale

スケールを設定するパラメータ

Untitled 35.png

Untitled 36.png

self.addParameter(
            QgsProcessingParameterScale(
                'Scale',
                self.tr('QgsProcessingParameterScale'),
                optional=True
            )
        )

Class: QgsProcessingParameterScale

QgsProcessingParameterDistance

距離パラメータ

Untitled 37.png

self.addParameter(
            QgsProcessingParameterDistance(
                'Distance',
                self.tr('QgsProcessingParameterDistance'),
                optional=True
            )
        )

Class: QgsProcessingParameterDistance

QgsProcessingParameterAggregate

属性の集計用パラメータ。

image.png

self.addParameter(
            QgsProcessingParameterAggregate(
                'Aggregate',
                self.tr('QgsProcessingParameterColor'),
                parentLayerParameterName='FeatureSource',
                optional=True
            )
        )

Class: QgsProcessingParameterAggregate

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2