waigani's diary

QGISを中心にFOSS4Gをいじくる

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

GROUP

新しいスクリプトを作成すると、"User scripts"以下に追加されるのは前回見てもらったとおり。
これを変更して、既存のグループもしくは新規のグループに入れることも出来ます。
指定方法は、

##[Test scripts]=group

のようにスクリプト内に記載しておくだけです。下図のように"Test scripts"の下に作成したスクリプトtestが表示されます。

出力の指定

スクリプトの実行結果として何を出力するかは、入力に使用したパラメータと同様な記述で定義出来ます。
定義出来る種別としては、

  • output raster
  • output vector
  • output table
  • output html
  • output file
  • output number
  • output string

があります。
書式としては入力パラメータと同じく、

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

となります。
試しに、

##output = output vector

とスクリプトに記述して実行してみましょう。

出力ファイル名を入力するためのフォームが表示されます。
ファイル名を指定しなかった場合、テンポラリのファイル名が与えられますので、入力は必須ではありません。
raster,vector,table,html,fileについては、ファイル名選択のフォームが表示されますが、number,stringについてはフォームは表示されません。

ベクトルレイヤ範囲のラスタ作成

簡単なスクリプトを作ってみます。
処理としては、

  • 入力としてベクトルファイルを受け取る(inputに入力ファイル名が入る)
  • processing.getobject()でファイル名→QgsVectorLayer
  • vectorLayerの範囲を取得しておく
  • processingのRasterWriteクラスを使用して、ベクトルレイヤの範囲を包括するラスタ作成(値は全面に0しか入れていない)

というものです。

from processing.core.RasterWriter import RasterWriter

##[Test scripts]=group
##input=vector
##output=output raster

vectorLayer = processing.getobject(input)
extent = vectorLayer.extent()
xmin = extent.xMinimum()
xmax = extent.xMaximum()
ymin = extent.yMinimum()
ymax = extent.yMaximum()
cellSize = (xmax-xmin)/100.0

writer = RasterWriter(output, xmin, ymin, xmax, ymax, cellSize, 1, vectorLayer.crs())
for x in range(writer.nx):
  for y in range(writer.ny):
    writer.setValue(0.0, x, y)


writer.close()
del writer

追記 2014.7.24
QGIS2.4では、processing.getobject()がprocessing.getObject()になっているので注意!!