タスクを設定する方法は、モデラーよりも高い柔軟性を提供するカスタムスクリプトを作成することですが、それでもユーザーに同様のインターフェイスを提供できます。次から作成できます。
処理ツールボックス>スクリプト>ツール>新しいスクリプトの作成
次に、以下のスクリプトをコピーして貼り付け、に保存しC:/Users/You/.qgis2/processing/scripts
ます。
以下のスクリプトは、モデルの動作をエミュレートしようとします。スクリプトは最終的なソリューションではありません(特に、ロケーションツールによる交差点と結合属性に使用したパラメーターは、定義したものと異なる場合があるため) 。実行するには、保存後にProcessing Toolboxから選択するだけです。
スクリプトは、あなたが尋ねたことを行うと思います:
##Example model=name
##Order1=vector
##Order2=vector
##Order3=optional vector
##Order4=optional vector
##Order5=optional vector
##Watershed=vector
##Order2_Wshed=output vector
##Order3_Wshed=output vector
##Order4_Wshed=output vector
##Order5_Wshed=output vector
order1 = processing.getObject(Order1)
order2 = processing.getObject(Order2)
order3 = processing.getObject(Order3)
order4 = processing.getObject(Order4)
order5 = processing.getObject(Order5)
watershed = processing.getObject(Watershed)
if Order3 is None:
print 'Processing Order1 and Order2'
else:
print 'Processing Order1, Order2 and Order3'
if Order4 is not None:
print 'Processing Order1, Order2, Order3 and Order4'
if Order5 is not None:
print 'Processing Order1, Order2, Order3, Order4 and Order5'
output_1a = processing.runalg("qgis:intersection", order1, watershed, None)
output_1b = processing.runalg("qgis:joinattributesbylocation", output_1a['OUTPUT'], watershed, u'intersects', 0, 0, '', 0, None)
output_2a = processing.runalg("qgis:intersection", order2, watershed, None)
output_2b = processing.runalg("qgis:joinattributesbylocation", output_2a['OUTPUT'], output_1b['OUTPUT'], u'intersects', 0, 0, '', 0, Order2_Wshed)
if Order3 is None:
pass
else:
output_3a = processing.runalg("qgis:intersection", order3, watershed, None)
output_3b = processing.runalg("qgis:joinattributesbylocation", output_3a['OUTPUT'], output_2b['OUTPUT'], u'intersects', 0, 0, '', 0, Order3_Wshed)
if Order4 is None:
pass
else:
output_4a = processing.runalg("qgis:intersection", order4, watershed, None)
output_4b = processing.runalg("qgis:joinattributesbylocation", output_4a['OUTPUT'], output_3b['OUTPUT'], u'intersects', 0, 0, '', 0, Order4_Wshed)
if Order5 is None:
pass
else:
output_5a = processing.runalg("qgis:intersection", order5, watershed, None)
output_5b = processing.runalg("qgis:joinattributesbylocation", output_5a['OUTPUT'], output_4b['OUTPUT'], u'intersects', 0, 1, 'sum, mean', 0, Order5_Wshed)
以下は、スクリプトを実行するときのインターフェースのスクリーンショットです(モデルを実行するときと似ているはずです):
注意すべき点はほとんどありません。
赤いボックスには必須パラメーターが含まれています
緑のボックスにはオプションのパラメーターが含まれています
青いボックスには必須パラメーターが含まれています
ブラックボックスには、結果を出力するためのオプションのパラメーターが含まれています。スクリプトは、関連する注文が選択されている場合にのみレイヤーを出力します(たとえば、order5の入力が選択されていないが、その出力が選択されている場合、エラーが発生します)。したがって、ユーザーは入力と関連する出力を選択する必要があります。これは意図的なものではありませんでしたが、個人的には、ユーザーにパラメーターを慎重にチェックさせるようにする良い方法だと思います。
QGIS 2.12.3(Processingプラグインバージョン2.12.2 を使用)を使用しました。