Логика если-то-иначе – это простой, но мощный принцип, позволяющий выполнять различные действия в различных условиях. Логику если-то-иначе можно объяснить следующим образом: ЕСЛИ условие действительно, выполнить действие; ИНАЧЕ условие недействительно, выполнить другое действие.
Использование логики если-то-иначе в ModelBuilder
В ModelBuilder логику если-то-иначе можно реализовать, создав инструмент скрипта, проверяющий наличие определенного условия, а затем выводящий две Булевы переменные, описывающие условия TRUE и FALSE, а также реализующий этот инструмент скрипта в модели. В качестве альтернативы созданию инструмента скрипта можно использовать инструмент Вычислить значение для проверки условия и вывода Булево значения.
В модели ниже реализуется инструмент скрипта с именем Проверить систему координат для использования логики ветвления. Инструмент скрипта выполняет оценку входного набора данных и сообщает, имеет ли набор данных систему координат проекции State Plane или неизвестную систему координат. В модели, если входной набор данных находится в системе координат проекции State Plane, ничего не происходит. Если во входном наборе данных обнаруживается неизвестная система координат, модель определяет систему проекции и проецирует входные данные. Один из ключевых шагов в использовании логики ветвления в ModelBuilder — это задание одного из условных выходных значений в качестве предварительного условия для дальнейшей обработки.
Примеры логики если-то-иначе
В следующем примере кода показывается, как ветвление если-то-иначе реализовано в инструменте скрипта Проверить систему координат, упомянутом ранее. Скрипт выводит две переменные, одна из которых представляет условие если – IF (TRUE), а другая условие иначе – ELSE (FALSE).
Пример «Проверить систему координат».
В примере выполняется проверка наличия входных данных в StatePlane, проверка отсутствия файла привязки и наличия файла привязки, отличного от StatePlane.
# Import modules
import arcpy
import sys
import traceback
# Set local variables
prj = ""
indata = "C:/ToolData/well.shp"
dsc = arcpy.Describe(indata)
sr = dsc.spatialReference
prj = sr.name.lower()
try:
# check if indata is in StatePlane, has no PRJ, or one other than StatePlane
if prj.find("_stateplane_") > -1:
# Set the Is Unknown parameter to FALSE, and the Is StatePlane parameter to TRUE
arcpy.SetParameterAsText(1,"false") #The first parameter refers to the "Is Unknown" variable
arcpy.SetParameterAsText(2,"true") #The second parameter refers to the "Is StatePlane" variable
arcpy.AddMessage("Coordinate system is StatePlane")
elif prj == "unknown":
# Set the Is Unknown parameter to TRUE, and the Is StatePlane parameter to FALSE
arcpy.SetParameterAsText(1,"true")
arcpy.SetParameterAsText(2,"false")
arcpy.AddMessage("To continue, first define a coordinate system!")
else:
# Set the Is Unknown parameter to FALSE, and the Is StatePlane parameter to FALSE
arcpy.SetParameterAsText(1,"false")
arcpy.SetParameterAsText(2,"false")
arcpy.AddMessage("Coordinate system is not StatePlane or Unknown")
except Exception as e:
AddPrintMessage(e[0], 2)
Смотри следующие примеры блогов по использованию логики если-то-иначе в модели:
- Understanding which "if" troubles you (Какое условие "if" вызывает проблемы?)
- If you are stuck at "if" - Part 1 - Calculate Value examples (Если вы застряли на "если (if)" - Часть 1 - Примеры Вычисления значения)
- If you are stuck at "if" - Part 2 - Script tool example (Если вы застряли на "если (if)" - Часть 2 - Пример Инструмента-скрипта)
- If you are stuck at "if" - Part 3 - Does Extension Exist model example (Если вы застряли на "если (if)" - Часть 3 - Пример модели Существует ли дополнительный модуль)
- If you are stuck at "if" - Part 4 - Does Selection Exist model example (Если вы застряли на "если (if)" - Часть 4 - Пример модели Существует ли выборка)
- If you are stuck at "if" - Part 5 - Does Projection Exist model example (Если вы застряли на "если (if)" - Часть 5 - Пример модели Существует ли проекция)