A maneira como eu configuraria sua tarefa seria criar um script personalizado que ofereça maior flexibilidade do que o modelador, mas ainda possa fornecer uma interface semelhante aos seus usuários. Você pode criar um de:
Caixa de ferramentas de processamento> Scripts> Ferramentas> Criar novo script
Em seguida, copie / cole o script abaixo e salve-o no C:/Users/You/.qgis2/processing/scripts
.
O script abaixo tenta emular o que o seu modelo faz. O script não é uma solução final (especialmente porque os paramaters que eu usei para o atributo Intersection and Join por ferramentas de localização podem diferir do que você definiu), mas espero que você possa usá-lo como modelo para expandir e aprimorar o script para atender às suas necessidades . Para executá-lo, basta selecioná-lo na caixa de ferramentas de processamento após ser salvo.
Eu acho que o script faz o que você pediu:
Os dois primeiros pedidos são obrigatórios, portanto serão processados.
IF
As instruções são usadas para garantir que quaisquer pedidos subsequentes sejam processados apenas se o correto os preceder (por exemplo, o order4 será executado apenas se o order3 tiver sido selecionado).
Além disso, as mensagens são impressas no Python Console, mostrando quais pedidos estão sendo processados.
##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)
Abaixo está uma captura de tela da interface ao executar o script (que deve ser semelhante a quando você executa seu modelo):
Algumas coisas a serem observadas:
A caixa vermelha contém parâmetros obrigatórios
A caixa verde contém parâmetros opcionais
Caixa azul contém parâmetro obrigatório
A caixa preta contém parâmetros opcionais para gerar resultados. O script só produzirá camadas se a ordem associada for selecionada (por exemplo, se a entrada da ordem5 não estiver selecionada, mas a saída for, um erro ocorrerá). Portanto, o usuário deve selecionar as entradas e as saídas relevantes. Isso não foi intencional, mas pessoalmente acho que é uma boa maneira de forçar o usuário a verificar os parâmetros cuidadosamente.
Eu usei o QGIS 2.12.3 (com o plugin Processing versão 2.12.2).