Фильтры являются настраиваемыми компонентами сервисов GeoEvent, которые позволяют фильтровать (удалять из потоковых данных) события GeoEvent, не удовлетворяющие заданным критериям. Фильтры, как правило, могут быть атрибутивными или пространственными фильтрами, или же комбинацией обоих типов, хотя макросы продукта GeoEvent Server, такие как $DEFINITION_NAME, например, включают фильтрацию GeoEvent по свойствам (подобно имени определения GeoEvent ассоциированного с текущим GeoEvent).
Атрибутивные фильтры
Атрибутивные фильтры сервиса GeoEvent фильтруют события с учетом критерия атрибута. Атрибутивный фильтр может быть настроен с помощью одного или более атрибутивных выражений. Логическая комбинация этих выражений представляет критерии, которым событие GeoEvent должно удовлетворять для того, чтобы проходить через фильтр.
Поддерживаются следующие операторы атрибутов:
- Равно (Equal) (=) – данный оператор сохраняет события GeoEvents, значения атрибутов которых равны заданному значению. Например, IdString = 3XAB891
- Не равно (Not Equal) (!=) – данный оператор сохраняет события GeoEvents, значения атрибутов которых не равны заданному значению. Например, StatusString != Err.
Примечание:
Операторы Равен и Не равен не следует применять для чисел с плавающей точкой. Например, не настраивайте выражение фильтра подобное Radius = 3.14159, вместо этого используйте операторы Больше , Меньше или другой оператор.
- Больше (>) – данный оператор сохраняет события GeoEvents, значения атрибутов которых больше заданного значения. Например, Speed > 50.
- Больше или равно (>=) – данный оператор сохраняет события GeoEvents, значения атрибутов которых больше или равно заданному значению. Например, Speed >= 50.
- Меньше (<) – данный оператор сохраняет события GeoEvents, значения атрибутов которых меньше заданного значения. Например, Altitude < 1000.
- Меньше или равно (<=) – данный оператор сохраняет события GeoEvents, значения атрибутов которых меньше или равно заданному значению. Например, Altitude <= 1000.
Примечание:
Операторы Больше, Меньше и другие не следует применять к строковым значениям. Например, не настраивайте выражение фильтра подобное Company > ABC, вместо этого используйте операторы Равно или Не равно и включите всю строку в выражение.
- IN – данный оператор сохраняет события GeoEvents, когда указанное значение поля существует в разделенном запятыми списке значений. Например, StatusCode IN HK1,HK3,HK5.
- MATCHES – данный оператор сохраняет события GeoEvents, когда указанное значение поля совпадает с регулярным выражением. Например, StatusCode MATCHES ^HK[135].
Примечание:
Указанное регулярное выражение оценивается либо как совпадающее, либо как не совпадающее с полным значением поля события; частичные совпадения не поддерживаются. В примере выше, если StatusCode содержит дополнительные символы за пределами одной цифры, то в выражение придётся включить .* для совпадения с любыми конечными символами в значении атрибута.
- EXISTS – данный оператор сохраняет события GeoEvents, когда указанное значение поля существует в полученной схеме события. Например, Geometry EXISTS.
- ISNULL – данный оператор сохраняет события GeoEvents, когда указанное значение поля содержит нулевое (null) значение. Например, Geometry ISNULL.
Примечание:
Проверка на NULL не поддерживается. GeoEvent определяет строку как пустую (строка нулевой длины), а не как объект null.
Пространственные фильтры
Пространственные фильтры в сервисе GeoEvent фильтруют события GeoEvents на основе пространственных отношений с геозоной. Геометрии, которые определяют геозону, должны быть импортированы в GeoEvent Server из опубликованного сервиса объектов перед настройкой пространственного фильтра.
Поддерживаются следующие пространственные операторы:
- INSIDE – геометрия GeoEvent считается внутри геозоны, если его геометрия полностью попадает в пределы области, определенной геозоной. Данный оператор может определить, расположена ли точка, связанная с событием GeoEvent, внутри области интереса.
- OUTSIDE – геометрия GeoEvent считается за пределами геозоны, если его геометрия полностью попадает за пределы области, определенной геозоной. Данный оператор может определить, расположена ли точка, связанная с событием GeoEvent, за пределами области интереса.
- ENTER – геометрия GeoEvent считается входящей в геозону, если его геометрия теперь попадает внутрь области, определенной геозоной, в то время как предыдущая позиция события GeoEvent из того же трека находилась за пределами геозоной. После обнаружения условия enter и получения разрешения для события GeoEvent пройти через фильтр, отслеживаемый объект должен сообщить как минимум об одном событии вне геозоны, перед тем, как другое условие enter будет признано (распознано).
- EXIT – геометрия GeoEvent считается выходящей из геозоны, если его геометрия теперь попадает за пределы области, определенной геозоной, в то время как предыдущая позиция события GeoEvent из того же трека находилась внутри геозоны. После обнаружения условия exit и получения разрешения для события GeoEvent пройти через фильтр, отслеживаемый объект должен найти еще, как минимум, одно событие внутри геозоны, перед тем, как другое условие exit будет признано (распознано).
Примечание:
Операторы атрибутов EXISTS и ISNULL выше также применимы, когда поле Геометрия задается как часть выражения пространственного фильтра.
Обычно набор геозон определяет области интереса и импортируются из сервиса объектов, предоставляющего полигональные объекты. Геозоны не обязательно должны быть представлены полигональными областями, они также могут быть импортированы из точечных или линейных объектов.
Пространственные операторы ниже могут быть использованы с различными типами геометрий. Эти пространственные операторы возвращают булево значение, указывающее, существует ли описанные отношения между геозоной и геометрией GeoEvent. Некоторые отношения требуют, чтобы геометрия события GeoEvent имела ту же размерность, что и геозона, с которым она сравнивается, в то время как другие имеют более гибкие пространственные ограничения. Многие из пространственных операторов ниже являются взаимоисключающими операторами Клементини (Clementini).
- CONTAINS – геометрия события будет содержать геозону, если геозона является подмножеством геометрии события и пересечение двух этих геометрий не является пустым. Содержит логически противопоставляется оператору Находится в. Точечная геометрия не может содержать полилинии или полигоны, следовательно невозможно, чтобы точка, и связанное с ней событие включало линию или полигон, импортированное как геозона. Теоретически пространственные отношения, в которых точка содержит точку, или линия содержит линию возможны, но проверять это не рекомендуется Незначительные различия в геометрии, например вызванные несовпадением привязки, могут привести к тому, что точка или линия, которые должны совпадать в пределах геозоны, окажутся не совпадающими, что в свою очередь будет оценено как ложь при построении отношения Содержит.
См. Метод IRelationalOperator.Contains в ArcObjects API Reference for .NET для более подробной информации об операторе Содержит.
- CROSSES – геометрия события перекрещивается с геозоной, если в геометрии меньшего порядка присутствует пересечение. Две полилинии перекрещиваются, если перекрест присутствует в одной или нескольких точках, при этом, хотя бы одна из них не является конечной точкой. Полилиния и полигон перекрещиваются, если они имеют общую линию или точку внутри полигона, которая не эквивалентна всей полилинии. Перекрещивания применимы только в отношениях полилиния/полилиния, полилиния/полигон или полигон/полилиния. Если хотя бы одна геометрия пустая – геометрии не перекрещиваются.
См. Метод IRelationalOperator.Crosses в ArcObjects API Reference for .NET для более подробной информации об операторе Перекрещивает.
- DISJOINT – геометрия события считается разъединенной с геозоной, если обе геометрии не пересекаются. Обратите внимание, что геометрия события может не совпадать с одной геозоной, но при это иметь пересечения с другой геозоной. Будьте внимательны при указании пространственного выражения. В выражении указывается не только геометрия события, но и указатель, например любая (какая-либо) или вся, а также набор геозон, определяющих указанный в выражении шаблон совпадений
(например, SomeCategory/.*).
См. Метод IRelationalOperator.Disjoint в ArcObjects API Reference for .NET для более подробной информации об операторе Разъединены.
- EQUALS – геометрия события равна геометрии геозоны, если их симметричная разность является пустым поднабором. Если вы переберёте каждый сегмент в каждой геометрии для сравнения типа сегмента и координат, и обнаружите, что они являются одинаковыми (с применением кластерных допусков пространственной привязки при определении равенства координат), то две геометрии будут считаться равными.
См. Метод IRelationalOperator.Equals в ArcObjects API Reference for .NET для более подробной информации об операторе Равно.
- INTERSECTS – геометрия события пересекает геометрию геозоны, если две геометрий не разъединены. Пересекает логически противопоставляется оператору Разъединены. Точечное событие, которое находится в области геозоны (полигон), также и пересекает эту геозону. Полилинейное или полигональное событие может пересекать геозону, но не обязательно находится полностью внутри геозоны. Геометрия события может пересекать одну геозону внутри набора геозон и может всё ещё быть DISJOINT ANY (например, разделено одним или более). Геометрия события не DISJOINT ALL пока она пересечет хотя бы одну геозону в наборе.
- OVERLAPS – геометрия события перекрывает геозону, если существует пересечение, чьё измерение является тем же, что и у геометрии, которая рассматривается как пересечение и не эквивалентно ни геометрии объекта, ни геозоне. Перекрытия применимы только к отношениям полилиния/полилиния, полигон/полигон и мультиточка/мультиточка. Если хотя бы одна геометрия пустая, геометрии не перекрываются.
*Точечная геометрия нарушает условие равнозначности, точечное местоположение события не может перекрывать геозону, геометрия которой также точечная.
- TOUCHES – геометрия события соприкасается с геозоной, если существует пересечение, и внутренняя часть пересечения пуста. Это означает, что две геометрии только касаются вершинами, которые определяют геометрию, а не точками, располагающимися между вершинами. Свойство Касается не определено для отношений точка/точка. Если хотя бы одна геометрия пустая, геометрии не касаются.
См. Метод IRelationalOperator.Touches Method в ArcObjects API Reference for .NET для более подробной информации об операторе Касается.
- WITHIN – геометрия события считается находящейся внутри геозоны, если две геометрии пересекаются, и пересечение их внутренних частей не является пустым. Находится в логически противопоставляется оператору Содержит.
См. Метод IRelationalOperator.Within Method в ArcObjects API Reference for .NET для более подробной информации об операторе Находится в.
Более подробно о реляционных операторах см. IRelationalOperator Interface в ArcObjects API Reference for .NET.
Для более подробной информации о работе с геозонами в GeoEvent Server см. раздел Управление геозонами.
Фильтры свойств GeoEvent
Каждое событие GeoEvent в GeoEvent Server имеет соответствующий набор свойств, таких как определение GeoEvent, используемое для построения события GeoEvent. Напомним, что определение GeoEvent является схемой, которая идентифицирует поля атрибутов и типы данных – дата, строка, целое и т.д. – для данных события GeoEvent. Фильтр можно настроить для фильтрации событий GeoEvent, основываясь на их свойствах, например, на определении GeoEvent.
При настройке выражения фильтра, ниспадающее меню для параметра поля отображает список имен полей из доступных определений GeoEvent. В верхней части этого списка есть несколько свойств GeoEvent Server:
- $OWNER_ID
- $OWNER_URI
- $DEFINITION_NAME
- $DEFINITION_GUID
- $RECEIVED_TIME
При построении фильтра со следующим выражением будут опущены любые геособытия, которые не содержат имя определения GeoEvent Flights-TcpTextIn: $DEFINITION_NAME = Flights-TcpTextIn. Фильтр, подобный данному, основанный на свойстве определения GeoEvent, может быть использован для фильтрации любых событий GeoEvent, которые не придерживаются требуемой схемы.
Настройка фильтров с помощью тегов
Тег – это метка, размещенная в конкретном поле определения GeoEvent. Теги аналогичны псевдонимам полей; они поддерживают согласованность в выражениях, когда различные определения событий GeoEvent связывают сходные данные с различными именами полей. Некоторые встроенные теги идентифицируют важные поля GeoEvent Server, содержащие информацию, такую как TRACK_ID или GEOMETRY.
Как только тег был создан и применен для конкретного поля в определении GeoEvent, фильтры могут ссылаться на поле по его тегу, а не по имени поля. Это особенно полезно при настройке фильтра атрибутов, поскольку он позволяет использовать один фильтр атрибутов, чтобы применить точно такие же критерии, основанные на атрибутах, для несколько типов событий.
См. раздел Управление тегами для более подробной информации об использовании тегов в GeoEvent Server.
Настройка фильтров с помощью регулярных выражений
Оператор 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 соответствует нулю или более экземпляров предыдущего символа; вопросительный знак (?) соответствует нулю или одному экземпляру. Обратная косая черта означает, что '.' является буквенной запятой, а не любым символом (*). Шаблон делает знак плюс (+) или минус (-) целой частью значения с плавающей точкой, а десятичное число необязательным (может возникать ноль раз). |