ArcGIS Arcade - это удобный, легкий и надежный язык выражений, который может выполнять математические вычисления, работать с текстом и логическими утверждениями. Он также поддерживает выражения с несколькими операторами, переменные и операторы управления потоком. Что делает Arcade особенно уникальным по сравнению с другими языками выражений и скриптов, это - то, что в него включены типы данных объектов и геометрии. Обычно Arcade используется для выполнения вычислений с полями слоев и геометрией.
Примечания по использованию
При написании выражений Arcade помните следующее:
- Выражения Arcade поддерживаются в инструментах Выявление инцидентов, Вычислить поле, Фильтр по выражению, Сопоставить поля, Присоединить объекты, Создать буферы и Заново создать треки.
- Выражения могут использовать атриубты из входных потоковых данных и источников, а также значения, описывающие аналитику, в которой создано выражение.
- В конструкторе выражений переменные профиля можно расширить для отображения списка полей, значений времени, целевых полей и полей соединения. Выражения ArcGIS Velocity используют следующие переменные профиля:
- $feature — во всех инструментах, кроме инструмента Присоединить объекты, эта переменная содержит атрибутивные поля входных объектов, поступающих из каналов и источников. Можно создавать выражения, использующие значения атрибутов объектов, выбирая поля из этой переменной.
- $analytic - эта переменная содержит значения, относящиеся к аналитике, такой как $analytic.AnalyticStartTime или $analytic.AnalyticLastEndTime.
- Чтобы преобразовать эти аналитические значения переменных из целого числа эпохи (1646409900000) в дату, используйте функцию Arcade Date(). Подробнее см. Функции дат в документации ArcGIS Arcade.
- $target - в инструменте Присоединить объекты для выражения Условие присоединения эта переменная профиля содержит атрибутивные поля из целевого канала или источника.
- $join - в инструменте Присоединить объекты для выражения Условие присоединения эта переменная профиля содержит атрибутивные поля из источника соединения.
- Перейдите к полям и компонентам схемы в конструкторе выражений Arcade.
- На панели Переменные профиля можно получить доступ к полям, переменным и компонентам схемы соответствующей категории, например, $feature, $analytic, $target или $join.
- Здесь отображаются поля или переменные, связанные с этой переменной.
- Введите собственные примеры значений для проверки выражения Arcade.
- Arcade предлагает примеры значений по умолчанию для каждого инструмента в зависимости от входящей схемы. Можно обновить примеры значений при построении выражений для каждого инструмента.
- Чтобы настроить типовые значения для тестирования выражений Arcade, выполните следующие действия:
- В зависимости от входящей схемы, если вы щелкните для редактирования выражения Arcade, откроется окно Настроить выражение Arcade.
- Обратите внимание, что на вкладке $feature для каждого входящего поля отображается типовое значение на основе его типа данных. Например, каждое строковое поле содержит пример значения Pacific. Для построения и проверки допустимого выражения для разных наборов данных необходимо изменить приведенные для поля типовые значения, чтобы выполнить проверку выражения Arcade и получить от него правильный тип данных.
- Настройте типовое значение, которое будет использоваться при проверке выражения Arcade.
- Щелкните Запустить в левом верхнем углу окна Настроить выражение Arcade для запуска выражения Arcade. Выражение будет проверено согласно обновленным типовым данным.
- Построение выражений Arcade для обработки пустого значения и 0.
- В математических операциях выражение Arcade определяет значения null как 0 для оценки. Соответственно, необходимо построить математические выражения Arcade в ArcGIS Velocity для учета значений null в ваших данных.
- Учет нулевых значений в ваших данных путем обработки нулевых значений. Рассмотрите выражение $feature.DistanceToFeature <= 5. Такое выражение должно быть построено в Arcade для обработки значений nulls как $feature.DistanceToFeature != null && $feature.DistanceToFeature <= 5. В таких выражениях <= 5 - это математическая операция, и если значение в поле DistanceToFeature - null, оно оценивается как 0, чтобы выражение выполнялось.
Математические операторы и примеры функций
Выражения, обрабатывающие числовые математические выражения. В таблице ниже приведены примеры доступных операций. Для получения дополнительной информации о математических операциях в Arcade см. раздел Математические функции.
Оператор | Объяснение | Пример | Результат |
a + b | a плюс b | fieldname содержит значение 1.5 $target["fieldname"] + 2.5 | 4.0 |
a - b | a минус b | fieldname содержит значение 3.3 $target["fieldname"]- 2.2 | 1.1 |
a * b | a умножить на b. | fieldname содержит значение 2.0 $join["fieldname"] * 2.2 | 4.4 |
a / b | a разделить на b | fieldname содержит значение 4.0 $join["fieldname"] / 1.25 | 3.2 |
abs( a ) | Возвращает абсолютное (положительное) значение числа a. | fieldname содержит значение -1.5 abs($target["fieldname"]) | 1.5 |
log( a ) | Возвращает натуральный логарифм (по основанию Е) от a. | fieldname содержит значение 1 log($join["fieldname"]) | 0 |
sin( a ) | Вычисляет тригонометрический синус a. Входные данные должны представлять значение угла в радианах. | fieldname содержит значение 1.5707 sin($target["fieldname"]) | 1 |
cos( a ) | Возвращает тригонометрический косинус a. Входные данные должны представлять значение угла в радианах. | fieldname содержит значение 0 cos($join["fieldname"]) | 1 |
tan( a ) | Возвращает тангенс a. Входные данные должны представлять значение угла в радианах. | fieldname содержит значение 0 tan($target["fieldname"]) | 0 |
sqrt( a ) | Возвращает квадратный корень a. | fieldname содержит значение 9 sqrt($join["fieldname"]) | 3 |
min( a, b ) | Возвращает самое малое значение числа между a и b. | fieldname содержит значения 1.5 и -3 min($join["fieldname"], -3) | -3 |
max( a, b ) | Возвращает самое высокое значение числа между a или b. | fieldname1 содержит значение 1.5 и fieldname2 содержит значение -3 max($target["fieldname1"], $join["fieldname2"]) | 1.5 |
constrain(<value>,<low>,<high>) | Возвращает входное значение, если оно находится в пределах заданных границ. Если входное значение меньше самого нижнего значения, возвращается нижнее значение. Если входное значение больше самого высокого значения, возвращается самое высокое значение. | constrain($target["distance"], 0, 10) constrain($join['Store dist'], 6, distance) | Возвращает 0, если расстояние меньше 0, 10, если расстояние больше 10, и расстояние в противном случае. Возвращает 6, если Store dist меньше 6, расстояние, если Store dist больше расстояния, и Store dist в противном случае. |
В следующем примере умножения для выражения условия соединения используется поле из целевого набора данных:
$target["Distance"] * 2 > $join["DistField"]
Примеры текстовых функций
Выражения Arcade могут работать с текстами. В таблице ниже приведены примеры доступных операций. Чтобы узнать больше о текстовых функциях в Arcade см. раздел Текстовые функции.
Оператор | Объяснение | Пример | Результат |
concatenate(<values>, <separator>) | Соединяет значения вместе и возвращает строку.
| fieldname содержит значение ArcGIS Velocity concatenate([$target["fieldname"], "is", "great!"], ' ') | ArcGIS Velocity велик! |
find(<searchText>, <text>, <startPos>) | Находит строку в пределах строки. Групповые символы не поддерживаются.
| fieldname1 содержит значение 14NorthStreet, и fieldname2 содержит значение North find($target["fieldname2"], $join["fieldname1"]) | 2 |
lower(<value>) | Делает буквы в строке строчными.
| fieldname содержит значение ANALYTICS lower($join["fieldname"]) | аналитика |
В следующем примере текста используются find и lower:
find(("north"), lower("146NorthStreet")) == False
Примеры функций дат
Arcade может работать с датами. В Arcade значения месяцев могут изменяться от 0 (Январь) до 11 (Декабрь), значения дней - от 1 до 31, часов - от 0 (00:00) до 23 (11:00 pm), минут и секунд - от 0 до 59, миллисекунд - от 0 до 999.
В таблице ниже приведены примеры доступных операций. Более подробно о функциях дат в Arcade см. в разделе Функции дат.
Оператор | Объяснение | Пример | Результат |
date( <value>, <month>, <day>, <hour>, <minute>) | Анализирует значение или набор значений в строке даты.
| fieldname содержит значение 1476987783555 Пример 1: Date($target["fieldname"]) Пример 2: Date(2017,0,14,0) Пример 3: Date() | Пример 1: 20 Oct 2016 11:23:03 am Пример 2: 14-е января 2017 12:00:00 Пример 3: Возвращает текущее время |
DateDiff(<date1>, <date2>, <units>) | Вычитает две даты и возвращает разницу в указанных единицах.
| Пример 1: DateDiff(Date(2017,1,14,0), Date()) Пример 2: DateDiff(Date(2017,1,14,0), Date(), "Years") | Результат будет зависеть от времени запуска команды. Пример 1: -20532129137 Пример 2: -0.6546783768647119 |
Year(<dateValue>) | Возвращает год заданной даты.
| Пример 1: fieldname – поле типа Date, значение которого соответствует 09.10. 2017 16:30:43. Year($join["fieldname"]) Пример 2: fieldname - это строковое поле в формате строки ISO 8601 со значением 2012-09-27 Пример 3: fieldname - строковое поле в формате строки ISO 8601 со значением Year(Date($target["fieldname"])). | Пример 1: 2017 Пример 2: 2012 |
Условные операторы
Условные выражения могут использовать следующие операторы:
Оператор | Объяснение | Пример | Результаты |
a > b a < b | a больше b a меньше b | 10 > 2 | False |
a >= b a <= b | a больше или равно b a меньше или равно b | abs(-10) >= 10 | True |
a != b | a не равно b | abs(-3) != -3 | True |
a == b | a равно b | abs(-5) == 5 | True |
<condition1> || <condition2> | Встречено условие один или условие два | (abs(-5) == 5) || (10 < 2) | True |
<condition1> && <condition2> | Встречено условие один и условие два | (abs(-5) == 5) && (10 < 2) | False |
В следующем примере выражения буфера используются расширенные функции и условия:
iif(field1 > field2, iif(field2 = 0, field3, field4), 0)
Ниже приведен пример умножения для условия присоединения:
iif(field1 > field2, iif(field2 = 0, field3, field4), 0) > $join["Distance"] * 2
Примеры логических операторов
Помимо операторов условий для создания выражений могут использоваться более продвинутые логические операторы, как показано в таблице ниже. Для получения дополнительной информации о логических функциях в Arcade см. раздел Логические функции.
Функция | Объяснение | Пример | Результат |
iif(<condition>,<true value>,<false value>) | Возвращает одно значение, если условие оценивается как Тrue, и другое значение, если условие оценивается как False. <true value> и <false value> могут быть следующими:
| iif($feature["field1"] > $feature["field2"], $feature["field1"], 0) iif($feature["field1"] > $feature["field2"], iif($feature["field2"] = 0, $feature["field3"], $feature["field4"]), 0) | Возвращает field1, если field1 больше, чем field2, и 0 в противном случае. Возвращает результат второй функции iff, если field1 больше, чем field2, и 0 во всех других случаях. |
when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>) | Оценивает несколько выражений поочередно до тех пор, пока одно из них не даст значения True.
| when(($feature["field1"] + 10) > 1, 1,($feature["field2"] + 10) > 2 , 2, $feature["field3"]) | Если field1 + 10 больше 1, возвращает 1. Если нет, проверяет, не будет ли field2 + 10 больше, чем 2. Если да, то будет возвращено 2. Если нет, возвращает field3. |
decode(<conditional val> , <case1> , <result1>, <case2>, <result2>, ... <caseN>, <resultN>, <defaultValue> ) | Оценивает выражение, а затем сравнивает его значение с последующими параметрами. Если выражение совпадает, возвращается следующее значение параметра. Если нет, существует опция, чтобы последний параметр стал возвращаемым значением по умолчанию.
| decode($feature["field1"] + 3 , $feature["field1"], 1, $feature["field2"], 2, 0) | Сравнивает равенство между условным val field1 + 3 и case1 field1. Если true, возвращает 1. Если false, сравнивается равенство между field1 + 3 и field2. Если true, он возвращает 2; в противном случае возвращается 0. |