Процессор Калькулятор поля может быть использован для вычисления значения. Процессор вычисляет выражение для получения нужного значения. Выражение может включать буквенные строки, числовые константы и данные событий, взятые из поименованных полей обрабатываемого события GeoEvent. Вычисленное значение может быть записано в существующее поле, может перезаписать текущие данные в этом поле или оно может быть записано в новое поле, созданное процессором.
Процессор Калькулятор поля является универсальным. Относительно постоянные выражения, такие как Distance * 0.3048, могут быть использованы для вычисления эквивалентного расстояния в метрах для исходного расстояния в футах. Процессор также поддерживает целый ряд функций Java String, таких как выражение replaceAll(Description, 'foo', 'bar'), например, которое может быть использовано для того, чтобы заменить все вхождения подстроки "foo" на подстроку "bar" в поле описания каждого события GeoEvent. Процессор также поддерживает ряд математических функций. Например, вы можете определить, какое из двух полей события GeoEvent содержит большее значение, используя max(Time1, Time2), или сгенерировать случайное число с использованием random().
Некоторые вопросы, которые следует учитывать при использовании процессора Калькулятор поля:
- Выражения могут быть как математическими, так и лексическими (на основе строк, а не числовых значений).
- При работе с текстовыми строками, не забудьте заключить их в одинарные кавычки: '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, что требует от GeoEvent Server создания нового определения GeoEvent. При использовании данного процессора для создания новых полей необходимо указать имя поля и тип данных. Для определения GeoEvent может быть указано имя и дополнительный тег, который, если он задан, будет применяться к новому полю в результирующем определении GeoEvent.
Операторы и функции, поддерживаемые процессором Калькулятор поля, показаны ниже.
Операторы и функции, поддерживаемые Калькулятором поля
Операция | Оператор | Пример |
---|---|---|
Сложение |
|
Выражение служит для вычисления простой суммы путем сложения числовых значений полей Odom1 и Odom2. Поддерживается также конкатенация строк (например, 'Hello' + 'World'). |
Вычитание |
|
Выражение служит для вычисления простой разности путем вычитания числовых значений полей с тегами VALUEA и VALUEB. В отличие от операции сложения, поддерживающей конкатенацию строк, операцию вычитания нельзя использовать для вычисления разности двух строк. |
Умножение |
|
Выражение служит для вычисления простого произведения путем умножения числового значения поля с именем Altitude на константу 0.3048 (в данном случае-выполняется преобразование футов в метры). |
Деление |
|
Выражение служит для вычисления простого частного путем деления числового значения поля с именем Distance на константу 1.609344 (преобразование километров в мили). |
Модуль |
|
Выражение служит для вычисления остатка от деления числового значения поля с тегом VALUEA на числовое значение поля с тегом VALUEB и возвращения результата в виде числа двойной точности. |
Логическое И |
|
Выражение служит для выполнения операции логического И над булевыми значениями полей с именами Flag1 и Flag2, и для возвращения результата в виде булева значения. Входные поля должны быть булева типа. Строковые литералы (например, TRUE) и константы (например, 1) в выражении не конвертируются при вычислении в эквивалентные булевы значения. |
Логическое ИЛИ |
|
Выражение служит для выполнения операции логического ИЛИ над булевыми значениями полей с именами Flag1 и Flag2 и возвращения результата в виде булева значения. |
Логическое НЕ |
|
Выражение служит для выполнения операции логического отрицания над булевым значением поля с именем Flag1 и возвращения результата в виде булева значения. Поддерживает вложенные выражения типа !(Flag1 && Flag2). |
Больше |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значение поля с именем Altitude больше заданной константы (результат является значением булевого типа). |
Больше или равно |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значение поля с именем Altitude больше или равно заданной константе (результат является значением булевого типа). |
Меньше |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значение поля с именем Altitude меньше заданной константы (результат является значением булевого типа). |
Меньше или равно |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значение поля с именем Altitude меньше или равно заданной константе (результат является значением булевого типа). |
Равенство |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значения полей с тегами VALUEA и VALUEB равны (результат является значением булевого типа). Операция Равенство выполняется только над числовыми типами, поддерживаемыми в исходной версии продукта (10.2.0). |
Неравенство |
|
Выражение служит для выполнения операции сравнения, определяющей истинность утверждения о том, что значения полей с тегами VALUEA и VALUEB не равны (результат является значением булевого типа). Операция Неравенство выполняется только над числовыми типами, поддерживаемыми в исходной версии продукта (10.2.0). |
Примечание:
Процессор Калькулятор поля пытается автоматически конвертировать значения при наличии смешанных типов. Например, выражение 10.0 + 5 должно быть преобразовано для выполнения суммирования сложением двух значений с плавающей точкой. Смешанные числовые значения и строковые значения, такие как codeValue + 'SomeString', где codeValue является числовым значением, приводят к непредсказуемым результатам. Правильным подходом будет конвертация codeValue в строковое значение с помощью такой строчной функции, как valueOf(object), описанной ниже.Примечание:
Операторы равенства и неравенства процессора Калькулятор поля не должны применяться напрямую к значениям с плавающей запятой. Для корректного определения равенства двух десятичных значений нужно сначала масштабировать их, округлить значения до длинных целых чисел и затем сравнить полученные значения типа длинное целое число.
- Не сравнивайте MyFloat1 == MyFloat2.
- Вместо этого сравнивайте round(MyFloat1*1000) == round(MyFloat2*1000).
Процессор Калькулятор поля содержит функции, соответствующие функциям из java.lang.Math. Полную техническую спецификацию и список функций см. в документации разработчика Java. Ниже приводится краткое описание наиболее популярных функций.
Константы для Калькулятора поля
Функция | Описание |
---|---|
E() | Возвращает число Эйлера (е), возведенное в степень, заданную числом двойной точности |
PI() | Возвращает представление числа Пи (отношения длины окружности к ее диаметру) в виде числа двойной точности |
Временные функции Калькулятора поля
Функция | Описание |
---|---|
currentTime() | Возвращает текущее системное время локального сервера ко времени эпохи в миллисекундах |
receivedTime() | Возвращает метку времени, когда входной коннектор создал событие |
Общие функции Калькулятора поля
Функция | Описание |
---|---|
abs(значение) | Возвращает абсолютную величину аргумента |
ceil(число двойной точности) | Возвращает ближайшее к заданному числу двойной точности большее целое число |
currentTime() | Возвращает текущее время/дату системы как длинное целое (миллисекунды эры) |
floor(число двойной точности) | Возвращает ближайшее к заданному числу двойной точности меньшее целое число |
hypot(double x, double y) | Возвращает sqrt((x*x) + (y*y)) без промежуточных переполнения или потери значимости |
max(значение a, значение b) | Возвращает большее из двух заданных значений аргумента |
min(значение a, значение b) | Возвращает меньшее из двух заданных значений аргумента |
random() | Возвращает число двойной точности, большее или равное 0.0 и меньшее 1.0 |
receivedTime() | Извлекает дату/время получения записи входным коннектором в виде длинного целого (миллисекунды эры) |
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 числа двойной точности |
Строковые функции Калькулятора поля
Функция | Описание |
---|---|
В качестве справки, приведенные ниже примеры синтаксиса используют следующие входные данные: | |
Длина( string ) Возвращает: integer Пример: 'TrackID length: ' + length(TrackID) | Возвращает длину строки. Результат: "TrackID length: 7" |
isEmpty(string) Возвращает: boolean Пример: isEmpty(EmptyStr) | Возвращает true, если длина источника 0. Результат: true |
isNull(string) Возвращает: boolean Пример: isNull(NullValue) | Возвращает true, если значение источника равно null. Результат: true |
equals(string, string) Возвращает: boolean Пример: equals(TrackID, EmptyStr) | Возвращает true, если заданные значения атрибутов строки эквивалентны. Возвращает false, если эти строки неэквивалентны; null, если к качестве входных данных были указаны значения, отличные от строк. Результат: false |
equalsIgnoreCase(string, string) Возвращает: boolean Пример: equalsIgnoreCase(TrackID, toString(TrackNum)) | Сравнивает исходную строку с другой строкой, игнорируя разные регистры. Возвращает true, если заданные значения атрибутов строки эквивалентны, игнорируя регистр. Возвращает false, если эти строки неэквивалентны; null, если к качестве входных данных были указаны значения, отличные от строк. Результат: false Объяснение: "AA-1234" не является эквивалентом "1234" |
equalsIgnoreCase(string, string) Возвращает: integer Пример: compareTo('ABCXD', 'ABCZD') | Лексикографическое сравнение двух строк. Возвращает значение 0, если обе эти строки эквивалентны; отрицательное значение, если первая строка лексикографически меньше второй строки; значение больше zero, если первая строка источника лексикографически больше, чем вторая. Результат: -2 Объяснение: int('X') - int('Z') возвращает -2, потому что в алфавите 'X' на две позиции меньше, чем 'Z'. |
equalsIgnoreCase(string, string) Возвращает: integer Пример: compareToIgnoreCase('abcde', 'ABCDE') | Выполняет лексикографическое сравнение двух строк без учета регистра. Результат: 0 |
startsWith(string, value) Возвращает: boolean Пример: startsWith('Programming', 'Program') | Возвращает true, если строка начинается с заданного префикса; в других случаях возвращает false. Второй аргумент, значение может быть строковым или целочисленным значением, которое может быть без колебаний внесено в строку. Результат: true |
startsWith(string, value) Возвращает: boolean Пример: endsWith(TrackID, TrackNum) | Возвращает true, если строка заканчивается заданным суффиксом; в других случаях возвращает false. Второй аргумент, значение может быть строковым или целочисленным значением, которое может быть без колебаний внесено в строку. Результат: true Объяснение: "AA-1234" заканчивается на "1234" |
indexOf(string, string, startIndex) Возвращает: integer Пример: indexOf('ABCDABCBCA','BC',3) | Возвращает первый индекс, на котором указанная подстрока находится в строке поиска, начиная с указанного индекса. Для поиска индексов с самого начала строки укажите начало поиска с индекса 0. Результат: 5 Объяснение: Начиная с символа в позиции 3, первое местонахождение подстроки 'BC' находится в позиции 5. |
lastIndexOf(string, string, startIndex) Возвращает: integer Пример: lastIndexOf(TrackID,'-',length(TrackID)) | Возвращает последний индекс, на котором указанная подстрока находится в строке поиска, выполняя поиск в обратном направлении, начиная с указанного индекса. Для поиска индексов с конца строки укажите начало поиска с length(source). Результат: 2 Объяснение: Начав в конце строки и выполняя поиск в обратном направлении, подстрока '-’ находилась в позиции 2. |
substring(string, intIndexBegin, intIndexEnd) Возвращает: string Пример: substring('ABCDABCXYZABCDABC',7,10) | Возвращает подстроку, извлеченную из исходной строки, в качестве новой строки. Подстрока начинается в заданном beginIndex и продолжается до знака на индексе (intIndexEnd - 1). Третий параметр может быть выражен как вложенная длина функции (исходная) или -1, что подразумевает конец строки. Результат: "XYZ" Объяснение: Начиная с индекса символа 7 ('X') возвращают три символа в позициях 7, 8 и 9. |
concat(string, string) Возвращает: string Пример: concat('Hello', 'World') | Соединяет указанную строку с концом строки источника. Результат: "HelloWorld" |
matches(string, regex) Возвращает: boolean Пример: matches(TrackID, '[A-Z]+[-][0-9]+') | Возвращает true, если указанный шаблон регулярного выражения соответствует указанной строке; в других случаях возвращает false. Шаблон регулярного выражения (regex) указывается как вторая строка. Результат: true Объяснение: Весь TrackID соответствует шаблону «одна или несколько букв, тире, одна или несколько цифр». |
contains(строка, подстрока) Возвращает: boolean Пример: contains(TrackID,'-') | Возвращает true, если исходная строка содержит заданную подстроку. Результат: true Объяснение: TrackID содержит литерал '-' где-то в значении строки. |
replaceFirst(string, regex, replacement) Возвращает: string Пример: replaceFirst(TrackID,'[0-9]+','nnnnn') | Замещает первую подстроку, соответствующую заданному шаблону регулярного выражения, другой заданной строкой, возвращая результат как новую строку. Результат: "AA-nnnnn" Объяснение: Первая подстрока, соответствующая шаблону «одна или несколько цифр», была заменена строкой из букв 'nnnnn’. |
replaceAll(string, regex, replacement) Возвращает: string Пример: replaceAll('ABABCABABABD','AB','X') | Заменяет каждую подстроку строки источника, соответствующую регулярному выражению, заданной заменой. Возвращает итоговую строку в качестве новой строки. Результат: "XXCXXXD" Объяснение: Каждое появление шаблона регулярного выражения 'AB' заменено буквенной строкой 'X'. |
replace(source, target, replacement) Возвращает: string Пример: replace('2017-12-31','-','/') | Заменяет каждое появление подстроки, заданной как буквенная строка, заданной замещающей подстрокой (которая также задана как строка из букв). Возвращает итоговую строку в качестве новой строки. Результат: " 2017/12/31" |
toLowerCase(string) Возвращает: string Пример: TrackID + ' to lower: ' + toLowerCase(TrackID) | Конвертирует все символы строки источника в символы нижнего регистра, используя правила локали по умолчанию. Возвращает после соответствующего преобразования строку с символами нижнего регистра в качестве новой строки. Результат: "AA-1234 to lower: aa-1234" |
toUpperCase(string) Возвращает: string Пример: TrackID + ' to upper: ' + toUpperCase(TrackID) | Конвертирует все символы строки источника в символы верхнего регистра, используя правила локали по умолчанию. Возвращает строку с символами верхнего регистра. Результат: "AA-1234 to upper: AA-1234" Объяснение: В данном примере алфавитная часть TrackID была уже в верхнем регистре. |
trim(string) Возвращает: string Пример: | Возвращает копию строки источника с удаленными пробелами в начале и конце строки. Результат: "GeoEvent Server" |
toString(fieldName) Возвращает: string Пример: toString(Geometry) Пример: toString(Epoch) | Возвращает представление строки со значением в заданном поле атрибута события. Эти функции предназначены для вставки строковых представлений атрибутов Дата и Геометрия в другие функции, такие как подстрока, чтобы при выполнении анализа в реальном времени можно было извлекать информацию из типа данных более высокого порядка. Результат: "{""x"":32.125,""y"":-117.125,""spatialReference"":{""wkid"":4326}}" Результат: "Fri Nov 03 17:07:56 PDT 2017" |
valueOf(fieldName) Возвращает: string Пример: 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) | Преобразует значение угла в градусах в приблизительное значение в радианах |