Chcę stworzyć prostą funkcję if / else w moim Modelu i chciałem wiedzieć, czy jest to możliwe, czy nie.
Chcę, aby to zrobić, jeśli wybrano dane wejściowe dla „Segment Layer”, że nie musi ono wykonywać „Segmentation (średnich zmian)” i zamiast tego używa „Segment Layer” jako danych wejściowych dla następnego procesu.
Dane wejściowe dla „segmentacji (przesunięcia środków)” są następujące
Zaktualizuj po próbie zaimplementowania odpowiedzi Josepha: Użyłem następującego kodu i otrzymałem ten błąd
Aktualizacja 2, po wymianie parametrów pojawia się błąd w wierszu 28, to jest „else:” oznacza
##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
Aktualizacja działa :) po kilku próbach i przy pomocy Josepha ten kod działa teraz jak urok, ostatnia sztuczka polegała na zamianie dwóch opcjonalnych wartości na „Brak”.
##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
Odpowiedzi:
Jak wspomniano w moim komentarzu, niestandardowy skrypt może być dobrym rozwiązaniem w tej sytuacji. Możesz utworzyć jeden z:
Poniższy skrypt ustawia parametry wejściowe jako opcjonalne wraz z instrukcją if / else w zależności od tego, który parametr zawiera warstwę. Jeśli więc wybrano warstwę
BGREN
, wykona ona narzędzie do segmentacji i ustawi dane wyjściowe; w przeciwnym razie wynikiem będzie warstwa wybrana zSegment_Layer
.Oto możliwy skrypt:
Parametry
otb:segmentationmeanshift
wyglądają przerażająco! Niestety nie mam zainstalowanego oprogramowania Orfeo, więc nie mogę przetestować tego narzędzia. Jednak parametry są pokazane tutaj , wystarczy je wpisać zamiast używać GUI. Po zakończeniu dodaj skrypt do modelera za pomocąBGREN
iSegment_Layer
jako warstw wejściowych:Ponadto w modelarzu może być konieczna zmiana definicji wymaganego parametru
BGREN
iSegment_Layer
:Następnie podłącz wyjście skryptu do narzędzia NDVI.
Przetestowałem to do pewnego stopnia przy użyciu innych narzędzi, które działały w zależności od wybranej warstwy wejściowej, więc mam nadzieję, że zadziała dla twojego modelarza!
EDYTOWAĆ:
Oto nieco zmodyfikowany kod (potrzebujesz przecinków, aby oddzielić parametry,
True
aFalse
instrukcje nie wymagają cudzysłowów wokół nich, ukośnik wstecz jest tylko dla czytelności, ale będzie zawierać jako jednowierszowy):Lub jako jedna linijka:
źródło