Quero criar uma função if / else simples dentro do meu Model e queria saber se é possível ou não.
Eu quero que isso seja feito se uma entrada para 'Camada de segmento' for selecionada e não precisar executar a 'Segmentação (deslocamento médio)' e usar 'Camada de segmento' como uma entrada para o próximo processo.
as entradas para a 'segmentação (deslocamento médio)' são as seguintes
Atualize depois de tentar implementar a resposta de Joseph: usei o seguinte código e recebi este erro
Atualização 2, depois de substituir os parâmetros, recebo um erro na linha 28, onde estavam '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
Atualize-o funciona :) depois de algumas tentativas e, com a ajuda de Joseph, esse código agora funciona como um encanto, o truque final foi substituir dois valores opcionais por 'Nenhum'.
##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
Respostas:
Como mencionado no meu comentário, um script personalizado pode ser o caminho a seguir nessa situação. Você pode criar um de:
O script a seguir define os parâmetros de entrada como opcionais, juntamente com uma instrução if / else , dependendo de qual parâmetro contém uma camada. Portanto, se uma camada foi selecionada
BGREN
, ela executará a ferramenta de segmentação e definirá a saída; caso contrário, a saída será a camada selecionadaSegment_Layer
.Aqui está um script possível:
Os parâmetros para o
otb:segmentationmeanshift
olhar assustador! Infelizmente, não tenho o Orfeo instalado, portanto não posso testar esta ferramenta. No entanto, os parâmetros são mostrados aqui , você só precisa digitá-los em vez de usar a GUI. Depois de concluído, adicione o script ao seu modelador usandoBGREN
eSegment_Layer
como camadas de entrada:Além disso, em seu modelador, pode ser necessário alterar a definição de parâmetro Requerido de
BGREN
eSegment_Layer
:Em seguida, conecte a saída do script à sua ferramenta NDVI.
Eu testei isso até certo ponto usando outras ferramentas que funcionavam dependendo da camada de entrada selecionada, espero que funcione para o seu modelador!
EDITAR:
Aqui está o código que você usou ligeiramente modificado (você precisa das vírgulas para separar os parâmetros,
True
e asFalse
instruções não requerem aspas ao redor deles, a barra invertida é apenas para facilitar a leitura, mas a incluirá como uma linha):Ou como uma linha:
fonte