Je veux faire une simple fonction if / else à l'intérieur de mon modèle et je voulais savoir si c'est possible ou non.
Je veux que cette chose fasse que si une entrée pour 'Segment Layer' est sélectionnée, elle n'a pas à exécuter la 'Segmentation (meanshift)' et utilise à la place 'Segment Layer' comme entrée pour le prochain processus.
les entrées pour la «segmentation (shift moyen)» sont les suivantes
Mettre à jour après avoir essayé d'implémenter la réponse de Joseph: j'ai utilisé le code suivant et j'ai eu cette erreur
Mise à jour 2, après avoir remplacé les paramètres, j'obtiens une erreur à la ligne 28, c'est `` 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
Mettre à jour ça marche :) après quelques essais et avec l'aide de Joseph, ce code fonctionne maintenant comme un charme, l'astuce finale était de remplacer deux valeurs facultatives par 'None'.
##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
Réponses:
Comme mentionné dans mon commentaire, un script personnalisé peut être la voie à suivre dans cette situation. Vous pouvez en créer un à partir de:
Le script suivant définit les paramètres d'entrée comme facultatifs avec une instruction if / else selon le paramètre qui contient une couche. Donc, si un calque a été sélectionné
BGREN
, il exécutera l' outil de segmentation et définira la sortie; sinon, la sortie sera le calque sélectionnéSegment_Layer
.Voici un script possible:
Les paramètres pour le
otb:segmentationmeanshift
look effrayant! Malheureusement, je n'ai pas installé Orfeo et je ne peux donc pas tester cet outil. Cependant, les paramètres sont affichés ici , il vous suffit de les saisir au lieu d'utiliser l'interface graphique. Une fois cela fait, ajoutez le script dans votre modeleur en utilisantBGREN
etSegment_Layer
comme couches d'entrée:De plus, dans votre modeleur, vous devrez peut-être modifier la définition de paramètre requise de
BGREN
etSegment_Layer
:Connectez ensuite la sortie du script à votre outil NDVI.
J'ai testé cela dans une certaine mesure en utilisant d'autres outils qui fonctionnaient en fonction de la couche d'entrée sélectionnée, alors j'espère que cela fonctionnera pour votre modeleur!
ÉDITER:
Voici le code que vous avez utilisé légèrement modifié (vous avez besoin des virgules pour séparer les paramètres,
True
et lesFalse
instructions ne nécessitent pas de guillemets autour d'eux, la barre oblique inverse est juste pour la lisibilité mais l'inclura comme une ligne):Ou en monoplace:
la source