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()になっているので注意!!