Sposób, w jaki skonfigurowałbym twoje zadanie, to stworzenie niestandardowego skryptu, który zapewnia większą elastyczność niż modelarz, ale nadal może zapewnić podobny interfejs dla swoich użytkowników. Możesz utworzyć jeden z:
Przetwarzanie Przybornik> Skrypty> Narzędzia> Utwórz nowy skrypt
Następnie skopiuj / wklej poniższy skrypt i zapisz go w C:/Users/You/.qgis2/processing/scripts
.
Poniższy skrypt próbuje naśladować to, co robi Twój model. Skrypt nie jest ostatecznym rozwiązaniem (zwłaszcza, że parametry użyte dla atrybutu Przecięcie i Połącz według narzędzi lokalizacji mogą różnić się od zdefiniowanych przez Ciebie), ale mam nadzieję, że możesz go użyć jako szablonu do rozszerzenia i ulepszenia skryptu, aby dostosować go do twoich potrzeb . Aby go uruchomić, po prostu wybierz go z Przybornika przetwarzania po zapisaniu.
Myślę, że skrypt robi to, o co prosiłeś:
Pierwsze dwa zamówienia są obowiązkowe, więc zostaną przetworzone.
IF
instrukcje służą do zapewnienia, że wszelkie kolejne zamówienia zostaną przetworzone tylko wtedy, gdy poprawne je poprzedzi (np. zamówienie4 uruchomi się tylko, jeśli wybrano zamówienie3).
Ponadto komunikaty są drukowane w konsoli Python, pokazując, które zamówienia są przetwarzane.
##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)
Poniżej znajduje się zrzut ekranu interfejsu podczas uruchamiania skryptu (który powinien wyglądać podobnie do uruchomionego modelu):
Kilka rzeczy do zapamiętania:
Czerwone pole zawiera obowiązkowe parametry
Zielone pole zawiera parametry opcjonalne
Niebieskie pole zawiera parametr obowiązkowy
Czarna skrzynka zawiera opcjonalne parametry do generowania wyników. Skrypt będzie generował warstwy tylko wtedy, gdy zostanie wybrana powiązana kolejność (np. Jeśli dane wejściowe dla zamówienia 5 nie zostaną wybrane, ale dane wyjściowe dla nich wystąpią, wystąpi błąd). Dlatego użytkownik musi wybrać wejścia i odpowiednie wyjścia. Nie było to zamierzone, ale osobiście uważam, że to dobry sposób, aby zmusić użytkownika do dokładnego sprawdzenia parametrów.
Użyłem QGIS 2.12.3 (z wtyczką Processing plugin 2.12.2).