Ich möchte eine einfache if / else-Funktion in meinem Modell erstellen und wollte wissen, ob dies möglich ist oder nicht.
Ich möchte, dass dies so ist, wenn eine Eingabe für 'Segmentebene' ausgewählt ist, dass sie nicht die 'Segmentierung (Mittelwertverschiebung)' ausführen muss und stattdessen 'Segmentebene' als Eingabe für den nächsten Prozess verwendet.
Die Eingaben für die 'Segmentierung (Mittelwertverschiebung)' lauten wie folgt
Update nach dem Versuch, Josephs Antwort zu implementieren: Ich habe den folgenden Code verwendet und diesen Fehler erhalten
Update 2, nach dem Ersetzen der Parameter erhalte ich eine Fehlermeldung in Zeile 28, hier steht '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
Update es funktioniert :) Nach ein paar Versuchen und mit Josephs Hilfe funktioniert dieser Code jetzt wie ein Zauber. Der letzte Trick bestand darin, zwei optionale Werte durch 'Keine' zu ersetzen.
##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
Antworten:
Wie in meinem Kommentar erwähnt, kann in dieser Situation ein benutzerdefiniertes Skript der richtige Weg sein. Sie können eine erstellen aus:
Das folgende Skript legt die Eingabeparameter zusammen mit einer if / else- Anweisung als optional fest, je nachdem, welcher Parameter eine Ebene enthält. Wenn also eine Ebene ausgewählt wurde , führt sie das Segmentierungswerkzeug aus und legt die Ausgabe fest. Andernfalls ist die Ausgabe die Ebene, aus der ausgewählt wurde .
BGREN
Segment_Layer
Hier ist ein mögliches Skript:
Die Parameter für das
otb:segmentationmeanshift
Aussehen sind beängstigend! Leider habe ich Orfeo nicht installiert und kann dieses Tool daher nicht testen. Die Parameter werden hier jedoch angezeigt . Sie müssen sie nur eingeben, anstatt die GUI zu verwenden. Fügen Sie anschließend das Skript mithilfe vonBGREN
undSegment_Layer
als Eingabeebenen zu Ihrem Modellierer hinzu :Außerdem müssen Sie in Ihrem Modellierer möglicherweise die erforderliche Parameterdefinition von
BGREN
und ändernSegment_Layer
:Verbinden Sie dann die Ausgabe des Skripts mit Ihrem NDVI-Tool.
Ich habe dies bis zu einem gewissen Grad mit anderen Tools getestet, die je nach ausgewählter Eingabeebene funktionierten. Hoffentlich funktioniert es für Ihren Modellierer!
BEARBEITEN:
Hier ist der Code, den Sie leicht modifiziert verwendet haben (Sie benötigen die Kommas, um die Parameter zu trennen,
True
undFalse
Anweisungen erfordern keine Anführungszeichen, der Schrägstrich dient nur der Lesbarkeit, enthält ihn jedoch als Einzeiler):Oder als Einzeiler:
quelle