过滤器是 GeoEvent 服务的可配置组件,用于过滤(从数据流中移除)不满足指定条件的 GeoEvent。尽管 GeoEvent Server 产品宏(例如 $DEFINITION_NAME)可按特性(例如,与当前 GeoEvent 相关联的 GeoEvent 定义名称) 启用 GeoEvent 过滤,过滤器通常还是为属性过滤器、空间过滤器或者属性和空间的组合。
属性过滤器
GeoEvent 服务中的属性过滤器用于根据属性条件过滤事件。可通过一个或多个属性表达式配置属性过滤器。这些表达式的逻辑组合构成了过滤条件,只有满足这些条件的 GeoEvent 才可通过过滤器。
支持以下属性运算符:
- 等于 (=) - 该运算符保留属性值等于指定值的 GeoEvent。例如,IdString = 3XAB891
- 不等于 (!=) - 该运算符保留属性值不等于指定值的 GeoEvent。例如,StatusString != Err。
注:
不要将“等于”和“不等于”运算符应用于浮点值。例如,不要配置半径 = 3.14159 这样的过滤器表达式,而是使用“大于”、“小于”或其他运算符。
- 大于 (>) - 该运算符保留属性值大于指定值的 GeoEvent。例如,Speed > 50。
- 大于或等于 (>=) - 该运算符保留属性值大于或等于指定值的 GeoEvent。例如,Speed >= 50。
- 小于 (<) - 该运算符保留属性值小于指定值的 GeoEvent。例如,高度 < 1000。
- 小于或等于 (<=) - 该运算符保留属性值小于或等于指定值的 GeoEvent。例如,高度 <= 1000。
注:
“大于”、“小于”和其他运算符不适用于字符串值。例如,不要配置公司 > ABC 这样的过滤器表达式,而是使用“等于”或“不等于”运算符并将整个字符串整合到表达式中。
- IN - 当在逗号分隔的值列表中存在指定字段的值时,该运算符保留 GeoEvent。例如,StatusCode IN HK1,HK3,HK5。
- MATCHES - 当指定字段的值与正则表达式相匹配时,该运算符保留 GeoEvent。例如,StatusCode MATCHES ^HK[135]。
注:
评估指定的正则表达式是否匹配整个事件字段值;不支持部分匹配。在上述示例中,如果 StatusCode 包含超出单个数字的额外字符,那么表达式需要包含 .* 以匹配属性值中的任何尾随字符。
- EXISTS - 当已接收的事件方案中存在指定字段时,该运算符保留 GeoEvent。例如,几何 EXISTS。
- ISNULL - 当指定字段包含空值时,该运算符保留 GeoEvent。例如,几何 ISNULL。
注:
不支持检查空字符串。GeoEvent 会将字符串定义为空(长度为零的字符串),而不是空对象。
空间过滤器
GeoEvent 服务中的空间过滤器根据与 GeoFence 的空间关系过滤 GeoEvent。在配置空间过滤器之前,必须从发布的要素服务将指定 GeoFence 的几何导入 GeoEvent Server。
支持以下空间运算符:
- INSIDE - 如果 GeoEvent 的几何全部在 GeoFence 定义的区域内,则认为 GeoEvent 的几何在 GeoFence 内部。该运算符可确定和 GeoEvent 相关联的点是否在感兴趣的区域内。
- OUTSIDE - 如果 GeoEvent 的几何全部在 GeoFence 定义的区域外,则认为 GeoEvent 的几何在 GeoFence 外部。该运算符可确定和 GeoEvent 相关联的点是否在感兴趣的区域外。
- ENTER - 当在同一追踪的前一 GeoEvent 位于 GeoFence 外部时,如果当前 GeoEvent 的几何在 GeoFence 定义的区域内,则认为 GeoEvent 的几何进入了 GeoFence。在检测到进入条件后,GeoEvent 便可通过过滤器,在识别另一次进入前,追踪的对象必须至少报告一个 GeoFence 外部的事件。
- EXIT - 当在同一追踪的前一 GeoEvent 位于 GeoFence 内部时,如果当前 GeoEvent 的几何在 GeoFence 定义的区域外,则认为 GeoEvent 的几何退出了 GeoFence。在检测到退出条件后,GeoEvent 便可通过过滤器,在识别另一次退出前,追踪的对象必须至少报告一个 GeoFence 内部的事件。
注:
当将几何字段指定为空间过滤器表达式的一部分时,上述 EXISTS 和 ISNULL 属性运算符同样适用。
通常,一组 GeoFence 会定义感兴趣的区域并从提供面要素的要素服务中导入。GeoFence 并不总是必须表示面区域,它们也可以从点和线要素导入。
以下空间运算符可用于不同类型的几何。这些空间运算符返回一个布尔型参数,指明在 GeoFence 和 GeoEvent 的几何之间是否存在已描述的关系。某些关系要求 GeoEvent 的几何和与其相比较的 GeoFence 具有相同的维度,而其他关系则有更为灵活的维度限制。以下许多空间运算符都是相互排斥的 Clementini 运算符。
- CONTAINS - 如果 geofence 是某个事件的几何的子集且这两个几何的交集不为空,该事件的几何将包含 geofence。“包含”与“被包含”在逻辑上相反。点几何不能包含折线或面,因此与事件关联的点不能包含作为 GeoFence 导入的线或区域。点可以包含点或线以包含线,但不推荐测试这种空间关系。由于投影导致的几何形状的细微差异可能生成一个您期望与 GeoFence 相重合但实际上不完全重合的点或线(在这种情况下,“包含”关系将评估为 false)。
有关“包含”运算符的详细信息,请参阅适用于 .NET 的 ArcObjects API 参考中的 IRelationalOperator.Contains 方法。
- CROSSES - 如果相交存在于较小维度的几何中,那么事件的几何会与 GeoFence 交叉。如果两条折线在一个或多个点处相交并且至少一个点不是端点,那么它们会交叉。如果折线和面在面的内部共享一条折线或一个点(不等于整个折线),那么该折线与面交叉。交叉仅适用于折线/折线、折线/面或面/折线关系。如果几何中的任何一个为空,则几何不交叉。
有关“交叉”运算符的详细信息,请参阅适用于 .NET 的 ArcObjects API 参考中的 IRelationalOperator.Crosses 方法。
- DISJOINT - 如果两个几何不相交,则事件的几何被认为与 GeoFence 不相交。请注意,事件的几何可以与一个 GeoFence 不相交,同时与另一个 GeoFence 相交。在指定空间表达式时请注意。表达式不仅指定事件的几何,还指定范围(任何或全部),以及一组使用正则表达式模式匹配(例如 SomeCategory/.*)
进行确定的 GeoFence。
有关“不相交”运算符的详细信息,请参阅适用于 .NET 的 ArcObjects API 参考中的 IRelationalOperator.Disjoint 方法。
- EQUALS - 如果事件几何与 GeoFence 几何的对称差为空集,则它们的几何相等。如果您要迭代每个几何中的各线段并比较线段类型和坐标,并且发现结果均相同(使用空间参考的拓扑容差确定坐标是否相等),则认为这两个几何相等。
有关“相等”运算符的详细信息,请参阅适用于 .NET 的 ArcObjects API 参考中的 IRelationalOperator.Equals 方法。
- INTERSECTS - 如果两个几何相交,则事件的几何与 GeoFence 相交。“相交”与“不相交”在逻辑上相反。位于某个 GeoFence 区域(面)内的某个事件的点也与该 GeoFence 交叉。即使某个事件的折线或面未完全位于某个 GeoFence 内,也可以与该 GeoFence 交叉。某个事件的几何可以与一组 GeoFence 内的某个 GeoFence 相交,并且仍然为 DISJOINT ANY(例如,不相交一个或多个)。该事件的几何不是 DISJOINT ALL,因为它至少与集合中的一个 GeoFence 相交。
- OVERLAPS - 如果相交尺寸等于正在考虑几何的尺寸,并且相交不等于事件几何或 GeoFence,则事件几何与 geofence 重叠。重叠仅适用于折线/折线、面/面以及多点/多点关系。如果几何中的任何一个为空,则几何不重叠。
* 点几何不符合相等条件,因此事件的点位置不能与几何也是点的 GeoFence 重叠。
- TOUCHES - 如果存在交集并且交集的内部为空,则事件的几何与 GeoFence 接触。这意味着两个几何仅在定义几何的折点处接触,而不是在折点之间的某个点处接触。点/点关系无接触。如果几何中的任何一个为空,则几何不接触。
有关“接触”运算符的详细信息,请参阅适用于 .NET 的 ArcObjects API 参考中的 IRelationalOperator.Touches 方法。
- WITHIN - 当两个几何相交并且它们内部的交集不为空时,则认为事件的几何被包含在 GeoEvent 内。“被包含”与“包含”在逻辑上相反。
有关“位于”运算符的详细信息,请参阅适用于 .NET 的 ArcObjects API 参考中的 IRelationalOperator.Within 方法。
有关关系运算符的详细信息,请参阅适用于 .NET 的 ArcObjects API 参考中的 IRelationalOperator 接口。
有关在 GeoEvent Server 中处理 GeoFence 的详细信息,请参阅管理 GeoFence。
GeoEvent 属性过滤器
GeoEvent Server 中的每个 GeoEvent 都有相关联的属性集,例如用于构建 GeoEvent 的 GeoEvent 定义。回想一下,GeoEvent 定义是为 GeoEvent 数据确定属性字段和数据类型(日期、字符串和整型等)的方案。可配置过滤器来根据 GeoEvent 的属性(例如 GeoEvent 定义)对其进行过滤。
当配置过滤器表达式时,“字段”参数下拉菜单显示来自可用的 GeoEvent 定义的字段名称列表。在该列表的顶部列有 GeoEvent Server 属性,其中包括:
- $OWNER_ID
- $OWNER_URI
- $DEFINITION_NAME
- $DEFINITION_GUID
- $RECEIVED_TIME
根据以下表达式构建过滤器将放弃不包含 Flights-TcpTextIn GeoEvent 定义名称的所有 GeoEvent:$DEFINITION_NAME = Flights-TcpTextIn。此类基于 GeoEvent 定义属性的过滤器可用于过滤不遵守所需方案的所有 GeoEvent。
使用标签配置过滤器
标签是置于 GeoEvent 定义特定字段上的一种标记。标签类似于字段别名;当不同 GeoEvent 定义将相似数据与不同字段名称相关联时,标签可为表达式的一致性提供支持。TRACK_ID 或 GEOMETRY 等特定的内置标签可标识包含信息的重要 GeoEvent Server 字段。
创建一个标签并将其应用到 GeoEvent 定义的特定字段后,过滤器就可通过标签(而不是其字段名称)引用相应的字段。在配置属性过滤器时这一功能尤其实用,因为这允许单个属性过滤器将完全相同的基于属性条件应用到多种类型的事件中。
有关在 GeoEvent Server 中使用标签的详细信息,请参阅管理标签。
使用正则表达式配置过滤器
MATCHES 运算符可在配置属性过滤器时使用,它支持使用正则表达式在目标字段中查找模式。正则表达式模式匹配可作为一个强大的数据验证工具。在本主题中无法全面介绍正则表达式及其语法,但是以下示例可帮助阐释它们在 GeoEvent 过滤器中的使用方法。
注:
正则表达式仅适用于类型字符串的属性字段。
注:
指定模式与整个字符串相匹配。无法输入 California 来匹配包含该子字符串的字符串。指定模式 。*California.* 以考虑该子字符串前后包含的 0 个或更多字符。
字段值 | RegEx 模式 | 结果 |
---|---|---|
SWA2382 |
| 克拉符号 (^) 规定字符串开始的模式,美元符号 ($) 规定字符串结束的模式。模式中的 [0-9]+ 部分表示字符串末尾的一个或多个 0 到 9 的数字。 目标字段中任何不以 SWA 开头或后面没有代表航班号的数字的值都将被过滤器丢弃。 |
02/15/1973 |
| 诸如“0 到 1”、“0 到 3”和“0 到 9”等的数字范围用于指定 mm/dd/yy 日期字符串的预期值。两位数月份后接两位数日期和四位数年份的值,如果不是用斜线 (/) 分隔,都将被过滤器丢弃。 |
3.14159 |
| 此模式验证了目标字段中的字符串可编译为数值。RegEx 模式中的星号 (*) 代表零个或更多个前面的字符;问号 (?) 表示零个或一个前面的字符。反斜线的意思是“.”表示真正的小数点,而不是通配符 (*)。该模式使浮点值的整数部分中必须包含一个正号 (+) 或负号 (-),并可包含小数点(可出现零次)。 |