Я хочу сделать простую функцию if / else внутри моей Модели, и я хотел знать, возможно ли это или нет.
Я хочу, чтобы это делалось так, если выбран Вход для «Сегментного слоя», чтобы он не выполнял «Сегментацию (означает смещение)» и использует вместо этого «Сегментный слой» в качестве Входных данных для следующего процесса.
Входные данные для «Сегментации (среднее смещение)» следующие
Обновление после попытки реализовать ответ Джозефа: я использовал следующий код и получил эту ошибку
Обновление 2, после замены параметров я получаю сообщение об ошибке в строке 28, это было «else:» стоит
##Example=name
##BGREN=optional raster
##Segment_Layer=optional vector
##output=output vector
if BGREN is not None:
processing.runalg('otb:segmentationmeanshift', \
-BGREN\
-0\
-70\
-70\
-0.1\
-100\
-100\
-0\
-0\
-0\
-'True'\
-'False'\
-1\
-0.1\
-'Layer'\
-'DN'\
-1024\
-1\
-0\
-output)
else:
output=Segment_Layer
Обновите это работает :) после нескольких попыток и с помощью Джозефа этот код теперь работает как талисман, последний трюк заключался в замене двух необязательных значений на «Нет».
##Example=name
##BGREN=optional raster
##Segment_Layer=optional vector
##output=output vector
if BGREN is not None:
processing.runalg('otb:segmentationmeanshift', \
BGREN, \
0, \
70, \
70, \
0.1, \
100, \
100, \
0, \
0, \
None, \
True, \
False, \
1, \
0.1, \
'Layer', \
'DN', \
1024, \
1, \
None, \
output)
else:
output=Segment_Layer
Ответы:
Как уже упоминалось в моем комментарии, в этой ситуации можно использовать собственный скрипт . Вы можете создать один из:
Следующий скрипт устанавливает необязательные входные параметры вместе с оператором if / else в зависимости от того, какой параметр содержит слой. Поэтому, если для слоя был выбран слой
BGREN
, он выполнит инструмент сегментации и установит выходные данные; в противном случае на выходе будет выбран слойSegment_Layer
.Вот возможный скрипт:
Параметры
otb:segmentationmeanshift
выглядят страшно! К сожалению, у меня не установлен Orfeo, поэтому я не могу протестировать этот инструмент. Тем не менее, параметры показаны здесь , вам просто нужно ввести их вместо использования графического интерфейса. Сделав это, добавьте скрипт в ваш моделер, используяBGREN
и вSegment_Layer
качестве входных слоев:Кроме того, в вашей программе моделирования вам может потребоваться изменить определение обязательного параметра
BGREN
иSegment_Layer
:Затем подключите вывод скрипта к вашему инструменту NDVI.
Я протестировал это в некоторой степени, используя другие инструменты, которые работали в зависимости от того, какой входной слой был выбран, так что, надеюсь, он будет работать для вашего моделиста!
РЕДАКТИРОВАТЬ:
Вот код, который вы использовали немного измененный (вам нужны запятые для разделения параметров,
True
аFalse
операторы не требуют кавычек вокруг них, обратная косая черта предназначена только для удобства чтения, но будет включать ее в виде одной строки):Или как однострочник:
источник