Фильтры являются настраиваемыми компонентами сервисов GeoEvent, которые позволяют фильтровать (удалять из потоковых данных) события GeoEvent, не удовлетворяющие заданным критериям. Фильтры, как правило, являются либо атрибутивными фильтрами, либо пространственными фильтрами, хотя макросы продукта дополнительного модуля GeoEvent, подобные $DEFINITION_NAME, например, включают фильтрацию GeoEvent по свойствам (подобно имени определения GeoEvent ассоциированного с текущим GeoEvent).
Атрибутивные фильтры
Атрибутивные фильтры сервиса GeoEvent фильтруют события с учетом критерия атрибута. Атрибутивный фильтр может быть настроен с помощью одного или более атрибутивных выражений. Логическая комбинация этих выражений представляет критерии, которым событие GeoEvent должно удовлетворять для того, чтобы проходить через фильтр.
Поддерживаются следующие операторы атрибутов:
- Равно (Equal) (=) – Данный оператор сохраняет события GeoEvent, значения атрибутов которых равны заданному значению. Например, IdString = 3XAB891
- Не равно (Not Equal) (!=) – Данный оператор сохраняет события GeoEvent, значения атрибутов которых не равны заданному значению. Например, StatusString != Err.
Примечание:
Операторы равенства (Equal) и неравенства (Not Equal) не следует применять для чисел с плавающей точкой. Например, не настраивайте выражение фильтра подобное Radius = 3.14159, вместо этого используйте операторы больше (Greater Than), меньше(Less Than) или другой оператор.
- Больше (Greater Than) (>) – Данный оператор сохраняет события GeoEvent, значения атрибутов которых больше заданного значения. Например, Speed > 50.
- Больше или равно (Greater Or Equal) (>=) – Данный оператор сохраняет события GeoEvent, значения атрибутов которых больше или равно заданному значению. Например, Speed >= 50.
- Меньше (Less Than) (<) – Данный оператор сохраняет события GeoEvent, значения атрибутов которых меньше заданного значения. Например, Altitude < 1000.
- Меньше или равно (Less Or Equal) (<=) – Данный оператор сохраняет события GeoEvent, значения атрибутов которых меньше или равно заданному значению. Например, Altitude <= 1000.
Примечание:
Операторы больше (Greater Than), меньше (Less Than) и другие не следует применять к строковым значениям. Например, не настраивайте выражение фильтра подобное Company > ABC, вместо этого используйте операторы равно (Equals) или не равно (Not Equal) и включите всю строку в выражение.
- IN – Данный оператор сохраняет события GeoEvent, когда указанное значение поля существует в разделенном запятыми списке значений. Например, StatusCode IN HK1,HK3,HK5.
- MATCHES – Данный оператор сохраняет события GeoEvent, когда указанное значение поля совпадает с регулярным выражением. Например, StatusCode MATCHES ^HK[135].
Примечание:
Указанное регулярное выражение оценивается либо как совпадающее, либо как не совпадающее с полным значением поля события; частичные совпадения не поддерживаются. В примере выше, если StatusCode содержит дополнительные символы за пределами одной цифры, то в выражение придётся включить .* для совпадения с любыми конечными символами в значении атрибута.
- EXISTS – Данный оператор сохраняет события GeoEvent, когда указанное значение поля существует в полученной схеме события. Например, Geometry EXISTS.
- ISNULL – Данный оператор сохраняет события GeoEvent, когда указанное значение поля содержит нулевое (null) значение. Например, Geometry ISNULL.
Примечание:
Проверка на NULL не поддерживается. GeoEvent определяет строку как пустую (строка нулевой длины), а не как объект null.
Пространственные фильтры
Пространственные фильтры в сервисе GeoEvent фильтруют события GeoEvent на основе пространственных отношений с GeoFence. Геометрии, которые определяют GeoFence должны быть импортированы в дополнительный модуль GeoEvent из опубликованного сервиса объектов перед настройкой пространственного фильтра.
Поддерживаются следующие пространственные операторы:
- INSIDE – Геометрия GeoEvent считается внутри GeoFence, если его геометрия полностью попадает в пределы области, определенной GeoFence. Данный оператор может определить, расположена ли точка, связанная с событием GeoEvent, внутри области интереса.
- OUTSIDE – Геометрия GeoEvent считается за пределами GeoFence, если его геометрия полностью попадает за пределы области, определенной GeoFence. Данный оператор может определить, расположена ли точка, связанная с событием GeoEvent, за пределами области интереса.
- ENTER – Геометрия GeoEvent считается входящей в GeoFence, если его геометрия теперь попадает внутрь области, определенной GeoFence, в то время как предыдущая позиция события GeoEvent из того же трека находилась за пределами GeoFence. После обнаружения условия entry и получения разрешения для события GeoEvent пройти через фильтр, отслеживаемый объект должен сообщить как минимум об одном событии вне GeoFence, перед тем, как другое условие enter будет признано (распознано).
- EXIT – Геометрия GeoEvent считается выходящей из GeoFence, если его геометрия теперь попадает за пределы области, определенной GeoFence, в то время как предыдущая позиция события GeoEvent из того же трека находилась внутри GeoFence. После обнаружения условия exit и получения разрешения для события GeoEvent пройти через фильтр, отслеживаемый объект должен найти еще, как минимум, одно событие внутри GeoFence, перед тем, как другое условие exit будет признано (распознано).
Примечание:
Операторы атрибутов EXISTS и ISNULL выше также применимы, когда поле Геометрия задается как часть выражения пространственного фильтра.
Обычно набор GeoFences определяет области интереса и импортируются из сервиса объектов, предоставляющего полигональные объекты. GeoFences не всегда должны представлять полигональные области. Они могут быть также импортированы из точечных и линейных объектов.
Пространственные операторы ниже применимы к различным типам геометрий. Эти пространственные операторы возвращают логическое значение (Boolean), указывающее, существует ли описанные отношения между GeoFence и геометрией GeoEvent. Некоторые отношения требуют, чтобы геометрия события GeoEvent имела ту же размерность, что и GeoFence, с которым она сравнивается, в то время как другие имеют более гибкие пространственные ограничения. Многие из пространственных операторов ниже являются взаимоисключающими операторами Клементини (Clementini).
- CONTAINS – GeoFence считается содержащим геометрию GeoEvent, если его геометрия является подмножеством геометрии GeoFence и пересечение двух этих геометрий не является пустым. Операция Contains (Содержит) является логической противоположностью операции Within; если GeoFence содержит геометрию GeoEvent, то геометрия GeoEvent находится внутри GeoFence.
- CROSSES – GeoFence считается пересекающей геометрию GeoEvent, если любая часть их геометрий совпадает. Две полилинии пересекаются, если они разделяют внутренние точки (по крайней мере, одна из которых не является конечной точкой). Полилиния и полигон пересекаются, если они имеют общую линию или точку внутри полигона, которая не эквивалентна всей полилинии.
- INTERSECTS – GeoFence пересекает геометрию GeoEvent, если две геометрии не отделены. Оператор Intersects является логической противоположностью оператора Disjoint.
- DISJOINT – GeoFence и геометрия GeoEvent считаются отделенными, если они не пересекаются.
- EQUALS – Две геометрии считаются равными, если их симметрическая разность является пустым множеством. Если вы переберёте каждый сегмент в каждой геометрии для сравнения типа сегмента и координат, и обнаружите, что они являются одинаковыми (с применением кластерных допусков пространственной привязки при определении равенства координат), то две геометрии будут считаться равными.
- OVERLAPS – GeoFence считается перекрывающим геометрию GeoEvent, если две геометрии пересекаются, пересечение совпадает по размерности со сравниваемыми геометриями и геометрии не равны.
- TOUCHES – GeoFence считается соприкасающейся с геометрией GeoEvent, когда геометрии пересекаются, но пересечение их внутренних частей является пустым.
- WITHIN – GeoFence считается находящейся внутри геометрии GeoEvent, если две геометрии пересекаются и пересечение их внутренних частей не является пустым. Оператор Within является логической противоположностью оператору Contains.
Более подробно о реляционных операторах см. IRelationalOperator Interface in the ArcObjects API Reference for .NET.
См. раздел Управление GeoFences для получения более подробной информации о работе с GeoFences в дополнительном модуле GeoEvent..
Фильтры свойств GeoEvent
Каждое событие GeoEvent в дополнительном модуле GeoEvent имеет соответствующий набор свойств, таких как определение GeoEvent, используемое для построения события GeoEvent. Напомним, что определение GeoEvent является схемой, которая идентифицирует поля атрибутов и типы данных – дата, строка, целое и т.д. – для данных события GeoEvent. Фильтр можно настроить для фильтрации событий GeoEvent, основываясь на их свойствах, например, на определении GeoEvent.
При настройке выражения фильтра, ниспадающее меню для параметра поля отображает список имен полей из доступных определений GeoEvent. В верхней части этого списка есть несколько свойств дополнительного модуля GeoEvent включая:
- $OWNER_ID
- $OWNER_URI
- $DEFINITION_NAME
- $DEFINITION_GUID
- $RECEIVED_TIME
При построении фильтра со следующим выражением будут опущены любые GeoEvent, которые не содержат имя определения GeoEvent Flights-TcpTextIn: $DEFINITION_NAME = Flights-TcpTextIn. Фильтр, подобный данному, основанный на свойстве определения GeoEvent, может быть использован для фильтрации любых событий GeoEvent, которые не придерживаются требуемой схемы.
Настройка фильтров с помощью тегов
Тег – это метка, размещенная в конкретном поле определения GeoEvent. Теги аналогичны псевдонимам полей; они поддерживают согласованность в выражениях, когда различные определения событий GeoEvent связывают сходные данные с различными именами полей. Некоторые встроенные теги идентифицируют важные поля дополнительного модуля GeoEvent, содержащие информацию, такую, как TRACK_ID или GEOMETRY.
Как только тег был создан и применен для конкретного поля в определении GeoEvent, фильтры могут ссылаться на поле по его тегу, а не по имени поля. Это особенно полезно при настройке фильтра атрибутов, поскольку он позволяет использовать один фильтр атрибутов, чтобы применить точно такие же критерии, основанные на атрибутах, для несколько типов событий.
Более подробно об использовании тегов в дополнительном модуле GeoEvent см. в разделе Управление тегами (Managing tags).
Настройка фильтров с помощью регулярных выражений
Оператор MATCHES – доступен при настройке фильтра атрибутов – поддерживает использование регулярных выражений для поиска шаблона в рамках целевого поля. Регулярное выражение сопоставления с образцом может быть мощным инструментом для проверки данных. Полное описание и синтаксис регулярных выражений не может быть раскрыт в рамках этого раздела, но приведенные ниже примеры иллюстрируют их применение в фильтрах событий GeoEvent.
Примечание:
Регулярные выражения могут быть применены только к атрибутивным полям строкового типа.
Примечание:
Указанный шаблон сопоставляется со всей строкой. Вы не можете ввести California для поиска строк, которые содержат подстроки. Определение шаблона .*California.* считывает от нуля или более символов до и после подстроки, которую фильтр должен найти.
Значение поля | RegEx (регулярное выражение) | Результат |
---|---|---|
SWA2382 |
| Знак (^) закрепляет шаблон к началу строки, а знак доллара ($) закрепляет шаблон в конце строки. [0-9]+ часть шаблона указывает на то, что одна или более цифр от 0 до 9 должны быть найдены в конце строки. Все значения в целевом поле, которые не начинаются с SWA, за которыми следует некоторое количество цифр, представляющих номер рейса, не будут учитываться фильтром. |
02/15/1973 |
| Использование числовых диапазонов, например от 0 до 1, от 0 до 3 и от 0 до 9 задает ожидаемые значения для mm/dd/yy строки с датой. Значения, которые не имеют два числа месяца, за которыми следуют две цифры дня и четыре цифры года, разделенные косой чертой (/), не будут учитываться фильтром. |
3.14159 |
| Этот шаблон проверяет, не представлена ли строка в целевом поле как числовое значение. Звездочка (*) в RegEx соответствует нулю или более экземпляров предыдущего символа; вопросительный знак (?) соответствует нулю или одному экземпляру. Обратная косая черта означает, что '.' является буквенной запятой, а не любым символом (*). Шаблон делает знак плюс (+) или минус (-) целой частью значения с плавающей точкой, а десятичное число необязательным (может возникать ноль раз). |