Использование выражений Arcade

ArcGIS Arcade — это удобный, легкий и надежный язык выражений, который может выполнять математические вычисления, работать с текстом и логическими утверждениями. Он также поддерживает выражения с несколькими операторами, переменные и операторы управления потоком. Что делает Arcade особенно уникальным по сравнению с другими языками выражений и скриптов, это - то, что в него включены типы данных объектов и геометрии. Обычно Arcade используется для выполнения вычислений с полями слоев и геометрией.

Примечания по использованию

При написании выражений Arcade помните следующее:

  • Выражения Arcade поддерживаются в инструментах Выявление инцидентов, Вычислить поле, Фильтр по выражению, Сопоставить поля, Присоединить объекты, Создать буферы и Заново создать треки.
  • Выражения могут использовать атрибуты из входных типов потоков и типов источников, а также значения, описывающие аналитику, в которой создано выражение.
  • В конструкторе выражений переменные профиля можно расширить для отображения списка полей, значений времени, целевых полей и полей соединения. Выражения ArcGIS Velocity используют следующие переменные профиля:
    • $feature — во всех инструментах, кроме инструмента Присоединить объекты, эта переменная содержит атрибутивные поля входных объектов, поступающих из каналов и источников. Выражения, использующие значения атрибутов объектов, можно создать, выбирая поля из этой переменной.
    • $analytic — эта переменная содержит значения, относящиеся к аналитике, такой как $analytic.AnalyticStartTime или $analytic.AnalyticLastEndTime.
      • Чтобы преобразовать эти аналитические значения переменных из целого числа эпохи (1646409900000) в дату, используйте функцию Arcade Date(). Для получения более подробной информации см. раздел функции дат документации Arcade.
    • $target - в инструменте Присоединить объекты для выражения Условие присоединения эта переменная профиля содержит атрибутивные поля из целевого канала или источника.
    • $join - в инструменте Присоединить объекты для выражения Условие присоединения эта переменная профиля содержит атрибутивные поля из источника соединения.
  • Перейдите к полям и компонентам схемы в конструкторе выражений Arcade.
    • На панели Переменные профиля можно получить доступ к полям, переменным и компонентам схемы соответствующей категории, например, $feature, $analytic, $target или $join.
      Доступ к полям и переменным
    • Здесь отображаются поля или переменные, связанные с этой переменной.
      Список полей и переменных, связанных с категорией
  • Введите собственные примеры значений для проверки выражения Arcade.
    • Arcade предлагает примеры значений по умолчанию для каждого инструмента в зависимости от входящей схемы. Можно обновить примеры значений при построении выражений для каждого инструмента.
    • Чтобы настроить типовые значения для тестирования выражений Arcade, выполните следующие действия:
      • В зависимости от входящей схемы, если вы щелкните для редактирования выражения Arcade, откроется диалоговое окно Настроить выражение Arcade.
      • Обратите внимание, что на вкладке $feature для каждого входящего поля отображается пример значения на основе его типа данных. Например, каждое строковое поле содержит пример значения Pacific. Для построения и проверки допустимого выражения для разных наборов данных необходимо изменить пример значений, предоставленных для поля, таким образом, чтобы выражение Arcade вычислялось и возвращало правильный тип данных.
        Для изменения примера значений перейдите на вкладку $feature.
      • Настройте примеры значений, если они используются при проверке выражения Arcade.
        Редактирование примеров значений, используемых в логике выражений Arcade
      • Нажмите Запустить в диалоговом окне Настроить выражение Arcade, чтобы запустить выражение Arcade. Выражение вычисляется согласно обновленным примерам данных.
  • Построение выражений Arcade для обработки пустых значений и 0.
    • В математических операциях выражение Arcade определяет значения null как 0 для оценки. Соответственно, необходимо построить математические выражения Arcade в 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>)

Соединяет значения вместе и возвращает строку.

  • values – массив строковых значений для соединения.
  • separator (дополнительный) – разделитель для использования при соединении, если значение параметра является массивом, или строка для соединения, если для первого параметра предоставлено одно значение. Если не указано, будет пустым.

fieldname содержит значение Velocity

concatenate([$target["fieldname"], "is", "great!"], ' ')

Velocity велик!

Найти

find(<searchText>, <text>, <startPos>)

Находит строку в пределах строки. Групповые символы не поддерживаются.

  • searchText – часть строки для поиска.
  • text – текст для поиска.
  • startPos (дополнительно) – индекс местоположения на основе нуля в строке для начала поиска.

fieldname1 содержит значение 14NorthStreet, и fieldname2 содержит значение North

find($target["fieldname2"], $join["fieldname1"])

2

С маленькой буквы

lower(<value>)

Делает буквы в строке строчными.

  • 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>)

Преобразует значение или набор значений в строку даты.

  • value (дополнительно) – либо количество миллисекунд, начиная с 1го января 1970 UTC, либо число, представляющее год. Если указан год, в последующих параметрах необходимо указать месяц и день. Значение также может быть строкой даты или строкой ISO 8601, которая конвертируется в дату.
  • month ( дополнительно) – месяц (0-11), где 0 – это январь и 11 – это декабрь.
  • day ( дополнительно) – день месяца (1-31).
  • hour ( дополнительно) – час дня (0 – 23).
  • minute ( дополнительно) – минута часа (0 – 59).
  • second ( дополнительно) – секунда минуты (0-59).
  • millisecond ( дополнительно) – миллисекунда секунды (0-999).

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>)

Вычитает две даты и возвращает разницу в указанных единицах.

  • date1 – значение даты, из которого вычитается вторая дата.
  • date2 – значение даты, которая используется как вычитаемое для первой заданной даты.
  • startpos (Дополнительно) – единицы, в которых возвращается разность двух заданных дат. Поддерживаются миллисекунды, секунды, минуты, часы, дни, месяцы и годы. По умолчанию — миллисекунды.

Пример 1: DateDiff(Date(2017,1,14,0), Date())

Пример 2: DateDiff(Date(2017,1,14,0), Date(), "Years")

Результат зависит от того, когда была выполнена команда.

Пример 1: -20532129137

Пример 2: -0.6546783768647119

Год

Year(<dateValue>)

Возвращает год заданной даты.

  • value – значение даты, у которой берется год.

Пример 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

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.

  • expression – выражение.
  • result – результат выражения. Это может быть число или поле.
  • default – дополнительное значение, если ни одно из выражений не совпадает.

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> )

Оценивает выражение, а затем сравнивает его значение с последующими параметрами. Если выражение совпадает, возвращается следующее значение параметра. Если нет, существует опция, чтобы последний параметр стал возвращаемым значением по умолчанию.

  • conditional val – значение условия. Может быть полем или выражением.
  • case – значение, которое нужно сравнить с условным значением.
  • result – результат, если соответствующий случай соответствует условному значению.
  • 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.