waigani's diary

QGISを中心にFOSS4Gをいじくる

QGIS プロセッシング Scriptsを使いたい その1

プロセッシング Scripts

QGIS 2.0より、SEXTANTEからプロセッシングと名前が変更になった機能を使ってみましょう。もちろんコードをガリガリ書いて使います。
メニューから"プロセッシング"→"ツールボックス"を選択します。
出てきたツールボックスのツリーの一番を開いていくと、"Create new script"というのが現れます。

"Create new Script"をダブルクリックすると、エディタが現れます。ここにプロセッシングの作法を守ってpythonコードを書いていけば、オリジナルのアルゴリズムを足していくことが出来ます。

もしくは、実際に書いたスクリプトが保存されるのは、

 ユーザのホームディレクトリ\.qgis2\processing\scripts

以下になりますので、他のエディタを使ってスクリプトを記述して、こちらにおいてしまってもOKです。

パラメータを受け取る

先頭"##"で記述した行で、入力フォームを作成してパラメータを受け取ることが出来ます。
書式としては、

##パラメータ名=パラメータタイプ 値

となります。

試しに

##inpupt = vector

とだけエディタに記述して保存してみましょう。test.pyとして保存したとします。
プロセッシングツールボックスを見ると、ツリーの一番下"User scripts"に保存したスクリプトが追加されていることが確認出来ます。

追加したスクリプトをダブルクリックして実行してみましょう。
パラメータタイプとして"vector(ベクトルレイヤ)"を指定していますので、読み込み済みのベクトルレイヤがあればレイヤ名が表示されますし、ファイルを指定することも出来ます。

レイヤを選択して"run"をしても、いまは処理の中身を記述していないので何も起きません。内部の処理としては、inputに選択したレイヤのファイル名(レイヤを選択した場合)、もしくは選択したファイル名が入っただけで終わりとなります。

パラメータタイプとして指定できるものとしては、下記があります。

  • vector ベクトルファイル
  • raster ラスタファイル
  • table テーブル
  • number 数値、val = number 10のようにデフォルト値を指定できる
  • string 文字列、str = string hogehogeのようにデフォルト値を指定できる
  • boolean 論理型、val = boolean Trueのようにデフォルト値を指定できる
  • multiple raster 複数のラスタレイヤ
  • multiple vector 複数のベクトルレイヤ
  • folder フォルダ名
  • file ファイル名
  • field フィールド名、ベクトルファイル名をinputとして受け取っていた場合、field_name = filed inputのように指定します
##input=vector
##field_name=field input


DEBUG

さて入力のパラメータは受け取れることがわかりました。スクリプトを書いていく前に、DEBUG方法を確認しておきたいです。調べたのですが、いい方法が良くわからず。ログに逐一書き出すしかないのかな?と思っています。
プロセッシングのログは、

 ユーザのホームディレクトリ\.qgis2\processing\processing_qgis.txt

に書き出されます。ログに追記したい場合は、

from processing.core.ProcessingLog import ProcessingLog

ProcessingLog().addToLog(ProcessingLog.LOG_INFO, 'test output')

のようにしてあげます。

あれ?スクリプトのエディタって日本語の入力受け付けないのかな??とか、また余計なところが気になってきた。。