あさひコラムColumn

QGIS

QGIS プロセッシング利用のすすめ

QGIS ではバージョン3.0以降、データ加工の処理が『プロセッシング』という処理にまとめられています
プロセッシングとはいったい何でしょうか?
今回は、QGIS のプロセッシングの歴史から、実際の QGIS での利用方法、Pythonからのアルゴリズム利用方法をご紹介します。

QGIS プロセッシングの歴史

プロセッシングはその昔、SEXTANTE (Sistema EXTremeño de ANàlisis Territorial)という名前のプロジェクトでした(Open Jump Wiki Sextante)(外部リンク)。元々はJavaで開発されていました。開発者は Victor Olayaさん(外部リンク)です。
Javaでしたから元々は gvSIG、OpenJUMP や uDig 等 Java で開発されたGISで利用されてきました。2012年以降 QGIS のプラグインとして利用可能になります。
Sextanteは QGIS 上で名前がProcessingに変わり QGIS 2.0からコアプラグインになりました。そして QGIS 3.0からは、ラスタやベクタのデータ加工機能の多くがプロセッシング内のアルゴリズムに変わってきています

プロセッシングとは何?

では、プロセッシングっていったい何で利用すると何がいいのでしょうか?
プロセッシングとは、いろいろなプロバイダから提供されている空間データ加工のアルゴリズム群を単独で利用するだけでなく、組み合わせて利用できるフレームワークです。 ここでは入出力の標準仕様があるので、それに従ってアルゴリズムを作成していることが重要です

プロセッシングの入力と出力で利用できるデータの型は、こちら(22.8.3. プロセシングアルゴリズムのための入力と出力の型)(外部リンク) に列挙されています。これ以外のデータ形式はプロセッシングアルゴリズムの入出力には利用できません。 空間系のデータ加工で利用が想定されるものはだいたいそろっていると思います。
入出力が標準化されているので、独自にプロセッシングアルゴリズムをコーディングする場合でも、その型用の入出力用パーツが用意されています。アルゴリズムを作成するとツールボックスから利用できるダイアログボックスができます。アルゴリズムでは入出力用パラメータの変数型と名前を定義するだけで自動的にダイアログボックスが作成されます。

また、バッチ処理(外部リンク)用のパラメータファイルを書く場合でも、入力データ型が標準で決まっているので、そのデータ型に合致したパラメータファイルを書けばいいです。

また入出力仕様がきまっているので、あるアルゴリズムの出力結果を別のアルゴリズムの入力にすることができます。グラフィカルモデラー(外部リンク)では、入力と複数のアルゴリズムの連携を画面上でデザインすることによって、複数のアルゴリズムが連携する新しいアルゴリズム(モデル)を作成することができます

グラフィカルモデラーで作成したモデルはPythonスクリプトとして出力することもできます

プロセッシングアルゴリズムの利用方法

提供されているプロセッシングアルゴリズムはいろいろな利用方法があります。ツールボックスから選択すればパラメータ指定ダイアログボックスが開くので、ここでパラメータを指定して実行できます。ここにあるバッチ処理ボタンをクリックするとバッチのパラメータ指定を行い実行することができます。

また、前記のモデラーでの呼び出しや、Pythonから各アルゴリズムを呼び出すことができます。自分で書いたPythonスクリプトから呼び出すこともできるし、QGIS のPythonコンソールから呼び出すことができます。

各プロバイダのアルゴリズムについては、こちら(23. プロセシングプロバイダーとアルゴリズム)(外部リンク)で解説されています。しかし、ここに解説されていないプロバイダのアルゴリズムもたくさんあると思われます。

Pythonからのアルゴリズム利用方法

では、アルゴリズムをPythonスクリプトからどのように利用すればいいのでしょうか。 プロセシングアルゴリズムをコンソールから使う(外部リンク)に説明があります。
 

from qgis import processing
myresult = processing.run("native:buffer", {'INPUT': '/data/lines.shp',
                'DISTANCE': 100.0,
                'SEGMENTS': 10,
                'DISSOLVE': True,
                'END_CAP_STYLE': 0,
                'JOIN_STYLE': 0,
                'MITER_LIMIT': 10,
                'OUTPUT': '/data/buffers.shp'})

というようなコードを実行すればいいようです。これはバッファの処理を実行する例です。processing というクラスで “native:buffer” というアルゴリズムを実行して ‘INPUT’ 以降にはキーワードがついてパラメータを記述しているというような感じです。 ‘/data/lines.shp’ というファイルが入力Shape ファイルで ’/data/buffers.shp’ というファイルが結果が格納されるファイルのようです。

ここで問題になるのが “native:buffer” というアルゴリズムの名前はどうやって調べるのか?また ‘INPUT’ 以降に記述されるパラメータはどうやって調べるのかというところです。

プロセッシングのアルゴリズム名称の一覧は、以下のコマンドをPythonコンソールで打ち込むと表示できるようです。
 
>>>from qgis import processing

>>>for alg in QgsApplication.processingRegistry().algorithms():
>>>          print(alg.id(), "->", alg.displayName())

そうすると、以下のようにプロバイダ名:アルゴリズム名,説明の一覧が表示されます。
 
gdal:aspect -> 傾斜方位(aspect)
gdal:assignprojection -> 投影法の割り当て
gdal:buffervectors -> バッファを作成
gdal:buildvirtualraster -> 仮想ラスタの構築
gdal:buildvirtualvector -> 仮想ベクタの構築
gdal:cliprasterbyextent -> 範囲を指定して切り抜き
gdal:cliprasterbymasklayer -> マスクレイヤによる切り抜き gdal:clipvectorbyextent -> 矩形領域でクリップ
gdal:clipvectorbypolygon -> マスクレイヤでクリップ
gdal:colorrelief -> 段彩図(color relief)

ここで判明したプロバイダ名:アルゴリズム名を使って processing.algorithmHelp(プロバイダ名:アルゴリズム名)という関数を呼び出すとアルゴリズムと呼び出しパラメータの解説が表示されます
 
>>>processing.algorithmHelp("gdal:aspect")
傾斜方位(aspect) (gdal:aspect)

----------------
Input parameters
----------------

INPUT: 入力ラスタ
   Parameter type: QgsProcessingParameterRasterLayer
   Accepted data types:
      - str: layer ID
      - str: layer name
      - str:レイヤソース
      - QgsProperty
      - QgsRasterLayer

BAND: バンド番号
   Parameter type: QgsProcessingParameterBand
   Accepted data types:
      - int
      - QgsProperty

TRIG_ANGLE: 方位角(北が0、東が90)の代わりに三角関数角(東が0、北が90)を計算
   Parameter type: QgsProcessingParameterBoolean
   Accepted data types:
      - bool
      - int
      - str
      - QgsProperty

ZERO_FLAT: 平らな場合、-9999ではなく0を返す
   Parameter type:
   QgsProcessingParameterBoolean Accepted data types:
      - bool
      - int
      - str
      - QgsProperty

COMPUTE_EDGES: 境界も計算
   Parameter type: QgsProcessingParameterBoolean
   Accepted data types:
      - bool
      - int
      - str
      - QgsProperty ZEVENBERGEN:

Hornの公式ではなく、Zevenbergen Thorneの公式を使用
   Parameter type: QgsProcessingParameterBoolean
   Accepted data types:
      - bool
      - int
      - str
      - QgsProperty OPTIONS:

追加オプション Parameter type: QgsProcessingParameterString
   Accepted data types:
      - str
      - QgsProperty

EXTRA: 追加のコマンドラインパラメータ
   Parameter type: QgsProcessingParameterString
   Accepted data types:
      - str
      - QgsProperty

OUTPUT: 傾斜方位(aspect)
   Parameter type: QgsProcessingParameterRasterDestination
   Accepted data types:
      - str
      - QgsProperty
      - QgsProcessingOutputLayerDefinition

----------------
Outputs
----------------

OUTPUT:
   傾斜方位(aspect)

または、ツールボックスからアルゴリズムのダイアログボックスを開き、「ヘルプ」ボタンをクリックするとパラメータを説明するWEBページが開きます(アルゴリズムのIDがいまいちわかりにくいですが)。

 

こちらの解説にある 『名前』という項目が当該パラメータのキーワードです。Pythonからアルゴリズムを呼び出す場合は、このキーワードを使った辞書型の配列を作成して渡すことになります

ツールボックスからアルゴリズムを実行した場合、ログに指定されたパラメータのリストや実行の経過が表示されます。

まとめ

QGIS のプロセッシングは各種空間データ加工処理の入出力を標準化し、各アルゴリズムを部品として連携させることを可能にする仕組みです。既存のアルゴリズムを組み合わせたり、自分でアルゴリズムをつくって組み合わせに追加することによって加工系の様々な作業に役立つものがつくれると思います。

とりわけ同じ作業が頻発する場合や大量のデータ加工処理を行う場合に威力を発揮すると思われます。

このあたりいろいろいじってみてノウハウの蓄積や共有をしてみると面白いと思います。

Other Columnその他のコラム

コラム一覧を見る

TOP