Skip To Content

Процессор Калькулятор поля

Процессор Калькулятор поля может быть использован для вычисления значения. Процессор вычисляет выражение для получения необходимого значения. Выражение может включать буквенные строки, числовые константы и данные событий, взятые из поименованных полей обрабатываемого события GeoEvent. Вычисленное значение может быть записано в существующее поле, может перезаписать текущие данные в этом поле или оно может быть записано в новое поле, созданное процессором.

Примеры

Ниже приведены примеры использования процессора Калькулятор поля:

  • Процессор Калькулятор поля можно использовать для добавления или вычитания времени из значения даты/времени, чтобы выровнять метку времени с местным часовым поясом. Это можно сделать путем добавления или вычитания значения времени в миллисекундах (как длинное целое число) из метки времени записи события, выраженного в миллисекундах (также как длинное целое число). Измененное значение временной метки может быть заполнено в новом поле типа date.
  • Процессор может преобразовывать множество единиц измерения, таких как расстояние, скорость, время, температура, высота, вес и многое другое.
  • Процессор можно использовать для данных реальном времени, полученных от работников в поле. Строковые функции, такие как replace(), toLowerCase(), toUpperCase() и concat() могут использоваться для обеспечения соответствия данных, поступающих из поля, определенным критериям или спецификации в режиме реального времени. Например, concat() можно использовать для удаления пробелов из собранных данных. Кроме того, toLowerCase() может использоваться для применения строчных букв во всех собранных данных. Выходные данные этих строковых функций могут быть записаны обратно в слой сервиса объектов в режиме реального времени.
  • Процессор можно использовать для рекурсивного поиска ключевых слов или фраз из поля комментариев (строки) в векторном слое ArcGIS Survey123. Используя строковую функцию contains(), в комментариях, отправленных пользователями, можно выполнять поиск описаний состояния дороги, таких как выбоина, мусор, затопление, растрескивание или блокирование. Если этот тип содержимого существует, вычисление поля возвращает логическое значение true. Запись события со значением true может быть отфильтрована и обработана в режиме реального времени, чтобы немедленно уведомить коммунальные службы или другие ответственные организации.

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

При работе с процессором Калькулятор поля имейте в виду следующее:

  • Процессор Калькулятор поля является универсальным. Относительно постоянные выражения, такие как Distance * 0.3048, могут быть использованы для вычисления эквивалентного расстояния в метрах для исходного расстояния в футах. Процессор также поддерживает целый ряд функций строковых Java, например таких как выражение replaceAll(Description, 'foo', 'bar'), которое может быть использовано для того, чтобы заменить все вхождения подстроки foo на подстроку bar в поле описания каждого события. Процессор также поддерживает несколько математических функций. Например, вы можете определить, какое из двух полей события max(Time1, Time2) содержит большее значение, используя , или сгенерировать случайное число с использованием random().
  • Процессор может быть сконфигурирован для хранения выходного вычисления в существующем поле или новом поле с помощью параметра Целевое поле. Изменение схемы записи события путем добавления нового поля GeoEvent Server требует создания нового определения GeoEvent. Новое определение GeoEvent будет управляться GeoEvent Server и будет удалено, если изменения вносятся в процессор или в сервис GeoEvent, в котором используется процессор.
  • При указании существующего поля для записи вычисляемого значения(й) не требуется, чтобы сначала было указано определение GeoEvent. Выбор определения GeoEvent из меню Определение служит только для сужения списка доступных полей для выбора в меню Поле.

Операторы и функции, поддерживаемые Процессором Калькулятора Поля, показаны ниже.

Операторы и функции, поддерживаемые Калькулятором поля

ОперацияОператорПример

Сложение

+
Odom1 + Odom2

Выражение служит для вычисления простой суммы путем сложения числовых значений полей Odom1 и Odom2. Поддерживается также конкатенация строк (например, 'Hello' + 'World').

Вычитание

-
VALUEA - VALUEB

Выражение служит для вычисления простой разности путем вычитания числовых значений полей с тегами VALUEA и VALUEB.

В отличие от операции сложения, поддерживающей конкатенацию строк, операцию вычитания нельзя использовать для вычисления разности двух строк.

Умножение

*
Altitude * 0.3048

Выражение умножает числовое значение в поле с именем Altitude на константу 0.3048, чтобы получить простое произведение (в данном случае выполняется преобразование футов в метры).

Деление

/
Distance / 1.609344

Выражение служит для вычисления простого частного путем деления числового значения поля с именем Distance на константу 1.609344 (преобразование километров в мили).

Модуль

%
VALUEA % VALUEB

Выражение служит для вычисления остатка от деления числового значения поля с тегом VALUEA на числовое значение поля с тегом VALUEB и возвращения результата в виде числа двойной точности.

Логическое И

&&
Flag1 && Flag2

Выражение служит для выполнения операции логического И над булевыми значениями полей с именами Flag1 и Flag2, и для возвращения результата в виде булева значения. Входные поля должны быть булева типа. Строковые литералы (например, TRUE) и константы (например, 1) в выражении не конвертируются при вычислении в эквивалентные булевы значения.

Логическое ИЛИ

||
Flag1 || Flag2

Выражение служит для выполнения операции логического ИЛИ над булевыми значениями полей с именами Flag1 и Flag2, и для возвращения результата в виде булева значения.

Логическое НЕ

!
!(Flag1)

Выражение служит для выполнения операции логического отрицания над булевым значением поля с именем Flag1 и возвращения результата в виде булева значения. Поддерживает вложенные выражения типа !(Flag1 && Flag2).

Больше

>
Altitude > 12500

Выражение выполняет логическую оценку, чтобы определить, действительно ли значение поля с именем Altitude больше заданной константы (результат является булевым значением).

Больше или равно

>=
Altitude >= 12500

Выражение выполняет логическую оценку, чтобы определить, действительно ли значение в поле с именем Altitude больше или равно указанной константе (результат является булевым значением).

Меньше

<
Altitude < 1500

Выражение выполняет логическую оценку, чтобы определить, является ли значение в поле с именем Altitude меньше заданной константы (результат является булевым значением).

Меньше или равно

<=
Altitude <= 1500

ВВыражение выполняет логическую оценку, чтобы определить, действительно ли значение поля с именем Altitude меньше или равно заданной константе (результат является булевым значением).

Равенство

==
VALUEA == VALUEB

Выражение выполняет логическую оценку, чтобы определить, действительно ли значения полей с тегами VALUEA и VALUEB равны (результат является булевым значением).

Неравенство

!=
VALUEA != VALUEB

Выражение выполняет логическую оценку, чтобы определить, действительно ли значения полей с тегами VALUEA и VALUEB не равны (результат является булевым значением).

Примечание:

Символы, обычно распознаваемые как арифметические функции или операторы, не должны использоваться в имени поля атрибута. Анализатор выражения, используемый процессором, не может различать выражения subtract accuracy from gps и gps-accuracy (в котором тире является частью имени поля атрибута), если само имя поля не заключено в синтаксис, специально разработанный для отделения имени поля от остальной части выражения. Подробнее см. в разделе Разграничение имен полей для требований, когда необходимо использовать допустимые метасимволы в именах полей атрибутов.

Примечание:

Процессор Калькулятор поля пытается автоматически конвертировать значения при наличии смешанных типов. Например, выражение 10.0 + 5 должно быть преобразовано для выполнения суммирования сложением двух значений с плавающей точкой. Смешанные числовые значения и строковые значения, такие как codeValue + 'SomeString', где codeValue является числовым значением, приводят к непредсказуемым результатам. Правильным подходом будет конвертация codeValue в строковое значение с помощью такой строковой функции, как valueOf(object), описанной ниже.

Примечание:

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

  • Не сравнивайте MyFloat1 == MyFloat2.
  • Вместо этого сравнивайте round(MyFloat1*1000) == round(MyFloat2*1000).

Процессор Калькулятор поля содержит функции, соответствующие функциям из java.lang.Math. Полную техническую спецификацию и список функций см. в документации разработчика Java. Ниже приводится краткое описание наиболее популярных функций.

Константы для Процессора Калькулятора поля

ФункцияОписание

E()

Возвращает число Эйлера (е), возведенное в степень, заданную числом двойной точности

PI()

Возвращает представление числа Пи (отношения длины окружности к ее диаметру) в виде числа двойной точности

Функции преобразования для Процессора Калькулятора Поля

ФункцияОписание

toBoolean(значение)

Возвращает предоставленное значение как логическое. Переданное значение преобразуется в строку, переводится в нижний регистр, обрезается для удаления пробелов на концах и затем оценивается. Любое строковое значение, которое совпадает с один из нижеперечисленных, вернет булево значение true: true, y, yes, on или 1. Любое строковое значение, которое совпадает с один из нижеперечисленных, вернет булево значение false: 'false', 'n', 'no', 'off', '0' или '-1'. Все остальные строковые значения возвращают значение null. null или пустая строка вернет значение null.

toDate(значение)

Возвращает предоставленное значение как длинное целое число эпохи в миллисекундах. Предоставленное значение может быть датой, длинным или строковым. Значения дата и длинное целое возвращаются без изменений в виде эпических длинных целых чисел в миллисекундах. Строковые значения сравниваются со следующими форматами дат: ‘yyyy-MM-dd'T'HH:mm:ss', 'EEE MMM dd HH:mm:ss zzz yyyy', 'MM/dd/yy hh:mm:ss aa', 'MM/dd/yy HH:mm:ss' и 'MM/dd/yy HH:mm'. Если строка соответствует одному из этих форматов, она преобразуется в дату и возвращается как длинное целое число эпохи в миллисекундах. Все остальные значения возвращают null.

toShort(значение)

Возвращает предоставленное значение как короткое 16-разрядное целое число со знаком в диапазоне от -32 768 до 32 767. Если значение не может быть преобразовано в числовое значение в пределах диапазона, функция возвращает null.

toInteger(значение)

Возвращает предоставленное значение в виде 32-разрядного целого числа со знаком в диапазоне от -2 147 483 648 до 2 147 483 647. Если значение не может быть преобразовано в числовое значение в пределах диапазона, функция возвращает null.

toLong(значение)

Возвращает предоставленное значение в виде длинного 64-разрядного целого числа со знаком в диапазоне от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Если значение не может быть преобразовано в числовое значение в пределах диапазона, функция возвращает null.

toFloat(значение)

Возвращает предоставленное значение как 32-разрядное значение с плавающей запятой со знаком. Если значение не может быть преобразовано в числовое значение, функция возвращает null.

toDouble(значение)

Возвращает предоставленное значение как 64-разрядное значение типа double со знаком. Если значение не может быть преобразовано в числовое значение, функция возвращает null.

Временные функции Процессора Калькулятора поля

ФункцияОписание

currentTime()

Возвращает текущее время как длинное целое число периодов в миллисекундах

receivedTime()

Возвращает метку времени, когда входной коннектор создал событие

currentOffsetUTC()

Возвращает разницу между текущей датой/временем локального сервера и UTC

Геометрические функции процессора Калькулятора поля

ФункцияОписание

toPoint(X, Y, SpatialRef)

Берет аргументы (X - double, Y - double, пространственная привязка WKID - integer) и возвращает точечную геометрию с координатами X, Y в указанной горизонтальной пространственной привязке. У пространственной привязки должен быть well known ID (числовой). Входящие значения аргументов будут приведены к правильному типу, если это возможно (в случае сбоя значение будет нулевым). Если любые из подаваемых аргументов являются нулевыми или не могут быть приведены к допустимому типу, эта функция вернет ноль.

toPoint3D(X, Y, Z, SpatialRef)

Берет аргументы (X - double, Y - double, Z - integer, пространственная привязка WKID - integer) и возвращает 3D точечную геометрию с координатами X, Y в указанной горизонтальной пространственной привязке. У пространственной привязки должен быть well known ID (числовой). Входящие значения аргументов будут приведены к правильному типу, если это возможно (в случае сбоя значение будет нулевым). Аргумент Z может быть нулем; если это так, то будет возвращена 2D точечная геометрия с координатами X, Y в указанной горизонтальной пространственной привязке. Если любые из аргументов, кроме Z, являются нулевыми или не могут быть приведены к допустимому типу, эта функция вернет ноль.

Общие функции процессора Калькулятора поля

ФункцияОписание

abs(значение)

Возвращает абсолютную величину аргумента

ceil(число двойной точности)

Возвращает ближайшее к заданному числу двойной точности большее целое число

floor(число двойной точности)

Возвращает ближайшее к заданному числу двойной точности меньшее целое число

hypot(double x, double y)

Возвращает sqrt((x*x) + (y*y)) без промежуточных переполнения или потери значимости

max(значение a, значение b)

Возвращает большее из двух заданных значений аргумента

min(значение a, значение b)

Возвращает меньшее из двух заданных значений аргумента

random()

Возвращает число двойной точности, большее или равное 0.0 и меньшее 1.0

round(значение)

Возвращает ближайшее к аргументу (числу двойной точности) длинное целое число

Примечание:

Процессор Калькулятор поля выполняет, когда это возможно, преобразования числовых типов. Например, если в функции указаны аргументы различных числовых типов (например, max(3.14159,25)), то для выполнения сравнения значения будут преобразованы в сравнимые типы (int, float или double). Процессор также преобразует вычисленные значения при записи их в поле атрибутов события (например, 6 + 7 будет записано в виде 13.0, если поле события имеет тип double).

Показатели для процессора Калькулятора поля

ФункцияОписание

sqrt(double)

Возвращает квадратный корень заданного числа двойной точности

cbrt(значение)

Возвращает кубический корень заданного числа двойной точности

exp(double)

Возвращает число Эйлера (е), возведенное в степень, заданную числом двойной точности

pow(double, double)

Возвращает значение первого аргумента, возведенное в степень, заданную вторым аргументом

Логарифмы для процессора Калькулятора поля

ФункцияОписание

log(double)

Вычисляет натуральный логарифм (по основанию е) числа двойной точности

log10(double)

Вычисляет логарифм по основанию 10 числа двойной точности

Строковые функции процессора Калькулятора поля

ФункцияОписание

В качестве справки, приведенные ниже примеры синтаксиса используют следующие входные данные:

Входные данные процессора Калькулятор поля, используемые в качестве справки для следующих примеров синтаксиса

length(string)

Возвращает: целое

Пример: 'TrackID length: ' + length(TrackID)

Возвращает длину строки.

Результат: "TrackID length: 7"

isEmpty(string)

Возвращает: булево

Пример: isEmpty(EmptyStr)

Возвращает true, если длина источника 0.

Результат: true

isNull(string)

Возвращает: булево

Пример: isNull(NullValue)

Возвращает true, если значение источника равно null.

Результат: true

equals(string, string)

Возвращает: булево

Пример: equals(TrackID, EmptyStr)

Возвращает true, если заданные значения атрибутов строки эквивалентны. Возвращает false, если эти строки неэквивалентны; null, если к качестве входных данных были указаны значения, отличные от строк.

Результат: false

equalsIgnoreCase(string, string)

Возвращает: булево

Пример: equalsIgnoreCase(TrackID, toString(TrackNum))

Сравнивает исходную строку с другой строкой, игнорируя разные регистры. Возвращает true, если заданные значения атрибутов строки эквивалентны, игнорируя регистр. Возвращает false, если эти строки неэквивалентны; null, если к качестве входных данных были указаны значения, отличные от строк.

Результат: false

Объяснение: "AA-1234" не является эквивалентом "1234"

equalsIgnoreCase(string, string)

Возвращает: целое

Пример: compareTo('ABCXD', 'ABCZD')

Лексикографическое сравнение двух строк. Возвращает значение 0, если обе эти строки эквивалентны; отрицательное значение, если первая строка лексикографически меньше второй строки; значение больше zero, если первая строка источника лексикографически больше, чем вторая.

Результат: -2

Объяснение: int('X') - int('Z') возвращает -2, потому что в алфавите 'X' на две позиции меньше, чем 'Z'.

equalsIgnoreCase(string, string)

Возвращает: целое

Пример: compareToIgnoreCase('abcde', 'ABCDE')

Выполняет лексикографическое сравнение двух строк без учета регистра.

Результат: 0

startsWith(string, value)

Возвращает: булево

Пример: startsWith('Programming', 'Program')

Возвращает true, если строка начинается с заданного префикса; в других случаях возвращает false. Второй аргумент, значение может быть строковым или целочисленным значением, которое может быть без колебаний внесено в строку.

Результат: true

startsWith(string, value)

Возвращает: булево

Пример: endsWith(TrackID, TrackNum)

Возвращает true, если строка заканчивается заданным суффиксом; в других случаях возвращает false. Второй аргумент, значение может быть строковым или целочисленным значением, которое может быть без колебаний внесено в строку.

Результат: true

Объяснение: "AA-1234" заканчивается на "1234"

indexOf(string, string, startIndex)

Возвращает: целое

Пример: indexOf('ABCDABCBCA','BC',3)

Возвращает первый индекс, на котором указанная подстрока находится в строке поиска, начиная с указанного индекса. Для поиска индексов с самого начала строки укажите начало поиска с индекса 0.

Результат: 5

Объяснение: Начиная с символа в позиции 3, первое местонахождение подстроки 'BC' находится в позиции 5.

lastIndexOf(string, string, startIndex)

Возвращает: целое

Пример: lastIndexOf(TrackID,'-',length(TrackID))

Возвращает последний индекс, на котором указанная подстрока находится в строке поиска, выполняя поиск в обратном направлении, начиная с указанного индекса. Для поиска индексов с конца строки укажите начало поиска с length(source).

Результат: 2

Объяснение: Начав в конце строки и выполняя поиск в обратном направлении, подстрока '-’ находилась в позиции 2.

substring(string, intIndexBegin, intIndexEnd)

Возвращает: строка

Пример: substring('ABCDABCXYZABCDABC',7,10)

Возвращает подстроку, извлеченную из исходной строки, в качестве новой строки. Подстрока начинается в заданном beginIndex и продолжается до знака на индексе (intIndexEnd - 1). Третий параметр может быть выражен как вложенная длина функции (исходная) или -1, что подразумевает конец строки.

Результат: "XYZ"

Объяснение: Начиная с индекса символа 7 ('X') возвращают три символа в позициях 7, 8 и 9.

concat(string, string)

Возвращает: строка

Пример: concat('Hello', 'World')

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

Результат: "HelloWorld"

matches(string, regex)

Возвращает: булево

Пример: matches(TrackID, '[A-Z]+[-][0-9]+')

Возвращает true, если указанный шаблон регулярного выражения соответствует указанной строке; в других случаях возвращает false. Шаблон регулярного выражения (regex) указывается как вторая строка.

Результат: true

Объяснение: Весь TrackID соответствует шаблону «одна или несколько букв, тире, одна или несколько цифр».

contains(строка, подстрока)

Возвращает: булево

Пример: contains(TrackID,'-')

Возвращает true, если исходная строка содержит заданную подстроку.

Результат: true

Объяснение: TrackID содержит литерал '-' где-то в значении строки.

replaceFirst(string, regex, replacement)

Возвращает: строка

Пример: replaceFirst(TrackID,'[0-9]+','nnnnn')

Замещает первую подстроку, соответствующую заданному шаблону регулярного выражения, другой заданной строкой, возвращая результат как новую строку.

Результат: "AA-nnnnn"

Объяснение: Первая подстрока, соответствующая шаблону «одна или несколько цифр», была заменена строкой из букв 'nnnnn’.

replaceAll(string, regex, replacement)

Возвращает: строка

Пример: replaceAll('ABABCABABABD','AB','X')

Заменяет каждую подстроку строки источника, соответствующую регулярному выражению, заданной заменой. Возвращает итоговую строку в качестве новой строки.

Результат: "XXCXXXD"

Объяснение: Каждое появление шаблона регулярного выражения 'AB' заменено буквенной строкой 'X'.

replace(source, target, replacement)

Возвращает: строка

Пример: replace('2017-12-31','-','/')

Заменяет каждое появление подстроки, заданной как буквенная строка, заданной замещающей подстрокой (которая также задана как строка из букв). Возвращает итоговую строку в качестве новой строки.

Результат: " 2017/12/31"

toLowerCase(string)

Возвращает: строка

Пример: TrackID + ' to lower: ' + toLowerCase(TrackID)

Конвертирует все символы строки источника в символы нижнего регистра, используя правила локали по умолчанию. Возвращает после соответствующего преобразования строку с символами нижнего регистра в качестве новой строки.

Результат: "AA-1234 to lower: aa-1234"

toUpperCase(string)

Возвращает: строка

Пример: TrackID + ' to upper: ' + toUpperCase(TrackID)

Конвертирует все символы строки источника в символы верхнего регистра, используя правила локали по умолчанию. Возвращает строку с символами верхнего регистра.

Результат: "AA-1234 to upper: AA-1234"

Объяснение: В данном примере алфавитная часть TrackID была уже в верхнем регистре.

trim(string)

Возвращает: строка

Пример: Пример синтаксиса функции trim (строка)

Возвращает копию строки источника с удаленными пробелами в начале и конце строки.

Результат: "GeoEvent Server"

toString(fieldName)

Возвращает: строка

Пример: toString(Geometry)

Пример: toString(Epoch)

Возвращает представление строки со значением в заданном поле атрибута события. Эти функции предназначены для вставки строковых представлений атрибутов Дата и Геометрия в другие функции, такие как подстрока, чтобы при выполнении анализа в реальном времени можно было извлекать информацию из типа данных более высокого порядка.

Результат: "{""x"":32.125,""y"":-117.125,""spatialReference"":{""wkid"":4326}}"

Результат: "Fri Nov 03 17:07:56 PDT 2017"

valueOf(fieldName)

Возвращает: строка

Пример: valueOf(Geometry)

Пример: valueOf(Epoch)

Возвращает представление строки со значением в заданном поле атрибута события. Функции toString( ) и valueOf( ) работают идентично.

Тригонометрические функции процессора Калькулятора поля

ФункцияОписание

acos(double)

Возвращает арккосинус числа (угол в диапазоне от 0.0 до π)

asin(double)

Возвращает арксинус числа (угол в диапазоне от -π/2 до π/2)

atan(double)

Возвращает арктангенс числа (угол в диапазоне от -π/2 до π/2)

atan2(double y, double x)

Возвращает угол θ из преобразования прямоугольных координат (x,y) в полярные (r,θ)

cos(double)

Возвращает тригонометрический косинус угла

cosh(double)

Вычисляет гиперболический косинус числа двойной точности

sin(double)

Вычисляет тригонометрический синус угла

sinh(double)

Вычисляет гиперболический синус числа двойной точности

tan(double)

Вычисляет тригонометрический тангенс угла

tanh(double)

Вычисляет гиперболический тангенс числа двойной точности

toDegrees(double)

Преобразует значение угла в радианах в приблизительное значение в градусах

toRadians(double)

Преобразует значение угла в градусах в приблизительное значение в радианах

Параметры

Ниже приведены параметры для процессора Калькулятора поля:

ПараметрОписание

Имя

Описательное имя процессора, используемое для справочной информации в GeoEvent Manager.

Процессор

Указывает выбранный процессор.

Выражение

Выражение, которое вычисляется процессором для каждой записи входящего события. Выражения могут быть математическими или лексическими. Возможные входные данные для этого параметра:

  • Строковые – используйте одинарные кавычки для определения символьных строк.
    • ‘Hello’
    • ‘World’
  • Целочисленные – используйте целые числа для идентификации числовых значений.
    • 123.456
    • 100
  • Поля – используйте имена полей из входящего определения GeoEvent для идентификации полей и их соответствующих значений. Учитывайте тип данных поля при вызове для вычислений полей.
    • Speed
    • Altitude
  • Теги - Использует теги GeoEvent Server для идентификации полей. Учитывайте тип данных поля с тегом при вызове для вычислений полей.
    • TRACK_ID
    • GEOMETRY
  • Операторы – используйте операторы для выполнения логических вычислений.
    • +
    • >=
  • Функции – используйте функции для возврата, идентификации или изменения значений. Некоторые функции зарезервированы для строк, в то время как другие применяются только для целых чисел. Учитывайте тип данных полей, вызываемых функциями при использовании процессора.
    • currentTime()
    • replace()

Полный список поддерживаемых операторов и функций, которые могут использоваться процессором как часть выражения, см. в разделе выше Поддерживаемые операторы и функции.

Примечание:

Пример простого выражения: Altitude + 100. Выражение записывается для оценки значения поля, называемого Altitude, чтобы добавить к нему 100. Если поле Altitude из записи события имеет сохраненное значение 12500, выражение выдаст новое значение 12600 (12500 + 100 = 12600). Оно может сохраняться в поле с типом string или integer.

Если подобное выражение задано как ‘Altitude’ + 100, то выражение записывается, чтобы взять буквенную строку, Altitude, и добавить к ней 100. Если новое поле, в котором хранится результат выражения, является строкой, выходными данными будет Altitude100, так как поддерживается конкатенация строк. Если новое поле, в котором хранятся выходные данные выражения, имеет целочисленный тип данных, то выражение является логически недопустимым и не приведет к получению значения.

Если выражение использует строковую функцию, например, length(Altitude), выражение записывается для подсчета общего количества символов в строке из поля Altitude. Если высота выражается как целочисленный тип данных (например, 12500), приведенное выше выражение является логически недопустимым и не приведет к значению. Причина в том, что length() – строковое выражение, которое ожидает строковое значение в скобках, а не целое число. Но если высота выражается в виде строки, приведенное выше выражение будет возвращать значение 5, так как строка 12500 содержит символы 5).

Целевое поле

Задает целевое поле для значения(й), вычисляемых процессором. Целевое поле – это место, куда будет записан результат выражения. По умолчанию – Существующее поле.

  • Существующее поле – целевым полем будет существующее поле. Значение(я), вычисленное процессором, будет сохранено в существующем поле из записи события.
  • Новое поле – целевым полем будет новое поле. Значение(я), вычисленное процессором, будет сохранено в новом поле. Изменение схемы записи события путем добавления нового поля требует нового определения GeoEvent.

Имя нового поля

(Условия)

Имя нового поля, в которое будут записаны значения, вычисленные процессором.

Параметр отображается, когда для Целевого поля установлено Новое поле, и скрыто, когда выбрано Существующее поле.

Тип нового поля

(Условия)

Укажите тип данных нового поля, создаваемого процессором. По умолчанию – Boolean. Это следующие доступные типы данных:

  • Boolean
  • Date
  • Double
  • Float
  • Геометрия
  • Целочисленные
  • Long
  • Short
  • String

Параметр отображается, когда для Целевого поля установлено Новое поле, и скрыто, когда выбрано Существующее поле.

Тег нового поля

(Условия)

Имя существующего тега поля, который будет применен к новому полю.

Примечание:

Тег должен уже существовать, чтобы новое поле было им отмечено. Процессор не создает теги динамически. Дополнительные сведения об управлении и создании тегов см. в разделе Управление тегами.

Параметр отображается, когда для Целевого поля установлено Новое поле, и скрыто, когда выбрано Существующее поле.

Имя нового определения GeoEvent

(Условия)

Имя, которое присваивается для нового Определения GeoEvent. Новое определение GeoEvent объединит схему записи входящего события с новым полем, используемым для хранения вычисленных значений.

Параметр отображается, когда для Целевого поля установлено Новое поле, и скрыто, когда выбрано Существующее поле.

Существующее имя поля

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

Примечание:

Используйте меню Определение, чтобы задать определение GeoEvent записей входящих событий. Указание определения GeoEvent сузит область доступных полей для выбора. Используйте меню Поле, чтобы выбрать имя существующего поля, в которое будут записаны значения, вычисленные процессором.

Советы и ограничения

При использовании процессора Калькулятор поля нужно иметь в виду следующее:

  • Выражения могут быть как математическими, так и лексическими (на основе строк, а не числовых значений).
  • При работе с текстовыми строками, всегда заключайте их в одинарные кавычки: 'Cat' + ' ' + 'Dog'.
  • Процессор будет выводить нулевое (null) значение, в случае неудачи преобразования типов или невозможности вычисления выражения.
  • Операндами выражения могут быть буквенные имена полей или теги, примененные к полям в определении GeoEvent. Например, выражение Odom1 + Odom2 можно использовать для сложения значений полей Odom1 и Odom2 и вычисления простой суммы. Если поле Odom1 было отмечено тегом MILEAGEA, а поле Odom2 – тегом MILEAGEB, то можно использовать выражение MILEAGEA + MILEAGEB.
  • Добросовестные усилия будут направлены на обработку данных различных типов в выражении. Например, 325 + 0.125, будет преобразовано в эквивалентное 325.0 + 0.125. Если указанное поле вывода ожидает длинное целое значение, то вычисленное значение двойной точности будет обрезано.
  • Следите за переполнением при создании выражений. Например, каждый элемент в выражении 60 * 60 * 80 * 10000 является коротким целым, но результат превосходит 32-разрядный диапазон нормального целого. Объявление каждого члена выражения значением двойной точности, подобно 60.0 * 60.0 * 80.0 * 10000.0, поможет избежать данной проблемы.
  • Запись вычисленного значения в новое поле изменяет схему записи события, что требует от GeoEvent Server создания нового Определения GeoEvent. При использовании процессора для создания нового поля необходимо указать имя поля и тип данных. Для определения GeoEvent может быть указано имя и дополнительный тег, который, если он задан, будет применяться к новому полю в результирующем определении GeoEvent.
  • Если обработка или фильтрация включена в состав любого сервиса GeoEvent, общая пропускная способность записей событий уменьшается из-за вычислительных затрат. Учитывайте это при разработке сервиса GeoEvent, который применяет процессор Калькулятор поля или любой другой процессор. Чтобы повысить производительность сервиса GeoEvent или всего сайта GeoEvent Server, рассмотрите возможность предварительной обработки или фильтрации данных в реальном времени.
  • Учитывайте типы данных поля или поля с тегом при построении выражения в процессоре Калькулятор полей. Иногда выражения являются логически недопустимыми из-за типа данных поля и не возвращают значение. В других случаях выражения логически корректны, но могут привести к неожиданному результату из-за задействованных типов данных. Например, попытка вычислить математическую сумму двух чисел, выраженных в виде строк, для хранения в новом поле с типом данных double недопустима. То же самое выражение допустимо, однако, если новое поле, получающее значение, является строкой, но результирующее значение может отличаться от ожидаемого. Каждое из чисел будет объединено вместе, а не математически сложено.