Я бы поставил перед вами задачу создать собственный сценарий, который обеспечивает большую гибкость, чем разработчик модели, но все же может предоставить аналогичный интерфейс своим пользователям. Вы можете создать один из:
Инструменты обработки> Сценарии> Инструменты> Создать новый скрипт
Затем скопируйте / вставьте скрипт ниже и сохраните его в C:/Users/You/.qgis2/processing/scripts
.
Сценарий ниже пытается эмулировать то, что делает ваша модель. Сценарий не является окончательным решением (тем более что параметры, которые я использовал для атрибута « Пересечение» и «Соединение» по инструментам определения местоположения , могут отличаться от того, что вы определили), но, надеюсь, вы можете использовать его в качестве шаблона для расширения и улучшения сценария в соответствии с вашими потребностями. , Чтобы запустить его, просто выберите его на панели инструментов обработки после того, как он был сохранен.
Я думаю, что скрипт делает то, что вы просили:
Первые два заказа являются обязательными, поэтому будут обработаны.
IF
операторы используются для того, чтобы гарантировать, что любые последующие ордера будут обрабатываться только в том случае, если перед ним стоит правильный (например, order4 будет выполняться только в том случае, если был выбран order3).
Кроме того, в консоли Python печатаются сообщения, показывающие, какие заказы обрабатываются.
##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).