Использование логики если-то-иначе (if-then-else) для создания ветвей
Логика если-то-иначе (if-then-else) – это простой, но мощный принцип, позволяющий выполнять различные действия в различных условиях. Логику если-то-иначе (if-then-else) можно объяснить следующим образом: ЕСЛИ условие действительно, выполнить действие; ИНАЧЕ условие недействительно, выполнить другое действие.
Использование логики если-то-иначе (if-then-else) в ModelBuilder
В ModelBuilder логику если-то-иначе (if-then-else) можно реализовать, создав инструмент скрипта, проверяющий наличие определенного условия, а затем выводящий две Булевы переменные, описывающие условия TRUE и FALSE, а также реализующий этот инструмент скрипта в модели. В качестве альтернативы созданию инструмента скрипта можно использовать инструмент Вычислить значение (Calculate Value) для проверки условия и вывода Булево значения.
В модели ниже реализуется инструмент скрипта с именем Проверить систему координат (Check Coordinate System) для использования логики ветвления. Инструмент скрипта выполняет оценку входного набора данных и сообщает, имеет ли набор данных систему координат проекции State Plane или неизвестную систему координат. В модели, если входной набор данных находится в системе координат проекции State Plane, ничего не происходит. Если во входном наборе данных обнаруживается неизвестная система координат, модель определяет систему проекции и проецирует входные данные. Один из ключевых шагов в использовании логики ветвления в ModelBuilder — это задание одного из условных выходных значений в качестве предварительного условия для дальнейшей обработки.
Примеры логики если-то-иначе (if-then-else)
В следующем примере кода показывается, как ветвление если-то-иначе (if-then-else) реализовано в инструменте скрипта Проверить систему координат (Check Coordinate System), упомянутом ранее. Скрипт выводит две переменные, одна из которых представляет условие если – 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)
Смотри следующие примеры блогов по использованию логики если-то-иначе (if-then-else) в модели:
- Понимание того, который из "если (if)" вас беспокоит
- Если вы застряли на "если (if)" - Часть 1 - Примеры Вычисления значения
- Если вы застряли на "если (if)" - Часть 2 - Пример Инструмента-скрипта
- Если вы застряли на "если (if)" - Часть 3 - Пример модели Существует ли расширение (Does Extension Exist)
- Если вы застряли на "если (if)" - Часть 4 - Пример модели Существует ли выборка (Does Section Exist)
- Если вы застряли на "если (if)" - Часть 5 - Пример модели Существует ли проекция (Does Projection Exist)