Il modo in cui imposterei il tuo compito sarebbe quello di creare uno script personalizzato che offra maggiore flessibilità rispetto al modellatore ma possa comunque fornire un'interfaccia simile ai suoi utenti. Puoi crearne uno da:
Casella degli strumenti di elaborazione> Script> Strumenti> Crea nuovo script
Quindi copia / incolla lo script seguente e salvalo in C:/Users/You/.qgis2/processing/scripts
.
Lo script seguente tenta di emulare ciò che fa il tuo modello. Lo script non è una soluzione finale (soprattutto perché i parametri che ho usato per l' attributo Intersezione e Unisci in base agli strumenti di localizzazione possono differire da ciò che hai definito) ma si spera che tu possa usarlo come modello per espandere e migliorare lo script in base alle tue esigenze . Per eseguirlo, basta selezionarlo dalla Casella degli strumenti di elaborazione dopo che è stato salvato.
Penso che la sceneggiatura faccia quello che hai chiesto:
I primi due ordini sono obbligatori, quindi verranno elaborati.
IF
le dichiarazioni vengono utilizzate per garantire che gli ordini successivi vengano elaborati solo se è preceduto da quello corretto (ad es. order4 verrà eseguito solo se order3 è stato selezionato).
Inoltre, i messaggi vengono stampati nella Console Python che mostra quali ordini vengono elaborati.
##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)
Di seguito è riportato uno screenshot dell'interfaccia quando si esegue lo script (che dovrebbe essere simile a quando si esegue il modello):
Poche cose da notare:
La casella rossa contiene parametri obbligatori
La casella verde contiene parametri opzionali
La casella blu contiene un parametro obbligatorio
La scatola nera contiene parametri opzionali per l'output dei risultati. Lo script genererà i livelli solo se è selezionato l'ordine associato (ad es. Se l'input per order5 non è selezionato ma l'output è, si verificherà un errore). Pertanto, l'utente deve selezionare gli ingressi e le uscite pertinenti. Questo non era intenzionale, ma personalmente penso che sia un buon modo per forzare l'utente a controllare attentamente i parametri.
Ho usato QGIS 2.12.3 (con il plug-in di elaborazione versione 2.12.2).