Skip To Content

过滤器

在本主题中

过滤器是 GeoEvent 服务的可配置组件,用于过滤(从数据流中移除)不满足指定条件的 GeoEvent。尽管 $DEFINITION_NAME 等 GeoEvent 扩展模块 产品宏可通过特性(例如,与当前 GeoEvent 相关联的 GeoEvent 定义名称)启用 GeoEvent 过滤,过滤器通常还是为属性过滤器或空间过滤器。

属性过滤器

GeoEvent 服务中的属性过滤器用于根据属性条件过滤事件。可通过一个或多个属性表达式配置属性过滤器。这些表达式的逻辑组合构成了过滤条件,只有满足这些条件的 GeoEvent 才可通过过滤器。

支持以下属性运算符:

  • 等于 (=) - 该运算符保留属性值等于指定值的 GeoEvent。例如,IdString = 3XAB891
  • 不等于 (!=) - 该运算符保留属性值不等于指定值的 GeoEvent。例如,StatusString != Err
    注:

    不要将“等于”和“不等于”运算符应用于浮点值。例如,不要配置半径 = 3.14159 这样的过滤器表达式,而是使用“大于”、“小于”或其他运算符。

  • 大于 (>) - 该运算符保留属性值大于指定值的 GeoEvent。例如,速度 > 50
  • 大于或等于 (>=) - 该运算符保留属性值大于或等于指定值的 GeoEvent。例如,速度 >= 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 扩展模块

支持以下空间运算符:

  • INSIDE - 如果 GeoEvent 的几何全部在 GeoFence 定义的区域内,则认为 GeoEvent 的几何在 GeoFence 内部。该运算符能够确定和 GeoEvent 相关联的点是否在感兴趣的区域内。
  • OUTSIDE - 如果 GeoEvent 的几何全部在 GeoFence 定义的区域外,则认为 GeoEvent 的几何在 GeoFence 外部。该运算符可确定和 GeoEvent 相关联的点是否在感兴趣的区域外。

    空间过滤器用于确定 GeoEvent 何时在 GeoFence 内部和外部

  • ENTER - 当在同一追踪的前一 GeoEvent 位于 GeoFence 外部时,如果当前 GeoEvent 的几何在 GeoFence 定义的区域内,则认为 GeoEvent 的几何进入了 GeoFence。在检测到进入条件后,GeoEvent 便可通过过滤器,在识别另一次进入前,追踪的对象必须至少报告一个 GeoFence 外部的事件。
  • EXIT - 当在同一追踪的前一 GeoEvent 位于 GeoFence 内部时,如果当前 GeoEvent 的几何在 GeoFence 定义的区域外,则认为 GeoEvent 的几何退出了 GeoFence。在检测到退出条件后,GeoEvent 便可通过过滤器,在识别另一次退出前,追踪的对象必须至少报告一个 GeoFence 内部的事件。

    空间过滤器用于确定 GeoEvent 何时进入和退出 GeoFence

注:

当将几何字段指定为空间过滤器表达式的一部分时,上述 EXISTS 和 ISNULL 属性运算符同样适用。

通常,一组 GeoFence 会定义感兴趣的区域并从提供面要素的要素服务中导入。GeoFence 不必始终表示面区域。它们也可以从点要素和线要素中导入。

以下空间运算符适用于不同类型的几何。这些空间运算符返回一个布尔型参数,指明在 GeoFence 和 GeoEvent 的几何之间是否存在已描述的关系。某些关系要求 GeoEvent 的几何和与其相比较的 GeoFence 具有相同的维度,而其他关系则有更为灵活的维度限制。以下许多空间运算符都是相互排斥的 Clementini 运算符。

  • CONTAINS - 如果 GeoEvent 的几何是 GeoFence 几何的子集且这两个几何的交集不为空,则可认为 GeoFence 包含 GeoEvent 的几何。“包含”运算符与“被包含”在逻辑上相反;如果 GeoFence 包含 GeoEvent 的几何,那么 GeoEvent 的几何在 GeoFence 内。

    “包含”空间运算符示例

  • CROSSES - 如果 GeoFence 和 GeoEvent 的任何一部分几何有所重合,则认为 GeoFence 与 GeoEvent 的几何交叉。如果两条折线共享内部点(至少有一个点非端点),则这两条折线交叉。如果折线和面在面的内部共享一条折线或一个点(不等于整个折线),那么该折线与面交叉。

    “交叉”空间运算符示例

  • INTERSECTS - 如果两个几何相交,则 GeoFence 与 GeoEvent 的几何相交。“相交”运算符与“不相交”运算符在逻辑上相反。
  • DISJOINT - 如果 GeoFence 和 GeoEvent 的几何没有相交,则认为他们不相交。

    “不相交”空间运算符示例

  • EQUALS - 当两个几何的对称差集为空集时,认为它们相等。如果您要迭代每个几何中的各线段来比较线段类型和坐标,并且发现结果均相同(使用空间参考的拓扑容差确定坐标是否相等),则认为这两个几何相等。

    “相等”空间运算符示例

  • OVERLAPS - 如果 GeoFence 和 GeoEvent 的几何相交,交集的维度与比较的几何维度相同,并且几何不相等,则认为 GeoFence 与 GeoEvent 的几何重叠。

    “重叠”空间运算符示例

  • TOUCHES - 当几何相交但它们内部的交集为空时,则认为 GeoFence 与 GeoEvent 的几何接触。

    “接触”空间运算符示例

  • WITHIN - 当两个几何相交但它们内部的交集不为空时,则认为 GeoFence 在 GeoEvent 的几何内。“被包含”运算符与“包含”在逻辑上相反。

    “被包含”空间运算符示例

有关关系运算符的详细信息,请参阅适用于 .NET 的 ArcObjects API 参考中的 IRelationalOperator 接口

有关在 GeoEvent 扩展模块 中使用 GeoFence 的详细信息,请参阅管理 GeoFence

GeoEvent 属性过滤器

GeoEvent 扩展模块 中的每个 GeoEvent 都有相关联的属性集,例如用于构建 GeoEvent 的 GeoEvent 定义。回想一下,GeoEvent 定义是为 GeoEvent 数据确定属性字段和数据类型(日期、字符串和整型等)的方案。可配置过滤器来根据 GeoEvent 的属性(例如 GeoEvent 定义)对其进行过滤。

当配置过滤器表达式时,“字段”参数下拉菜单显示来自可用的 GeoEvent 定义的字段名称列表。在该列表的顶部列有 GeoEvent 扩展模块 属性,其中包括:

  • $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 扩展模块 字段。

创建一个标签并将其应用到 GeoEvent 定义的特定字段后,过滤器就可通过标签(而不是其字段名称)引用相应的字段。在配置属性过滤器时这一功能尤其实用,因为这允许单个属性过滤器将完全相同的基于属性条件应用到多种类型的事件中。

有关在 GeoEvent 扩展模块 中使用标签的详细信息,请参阅管理标签

使用正则表达式配置过滤器

MATCHES 运算符可在配置属性过滤器时使用,它支持使用正则表达式在目标字段中查找模式。正则表达式模式匹配可作为一个强大的数据验证工具。在本主题中无法全面介绍正则表达式及其语法,但是以下示例可帮助阐释它们在 GeoEvent 过滤器中的使用方法。

注:

正则表达式仅适用于类型字符串的属性字段。

注:

指定模式与整个字符串相匹配。无法输入 California 来匹配包含该子字符串的字符串。如要通过过滤器查找该字符串,应使用模式 .*California.* 以考虑该子字符串前后包含的 0 个或更多字符。

字段值RegEx 模式结果

SWA2382

^SWA[0-9]+$

克拉符号 (^) 规定字符串开始的模式,美元符号 ($) 规定字符串结束的模式。模式中的 [0-9]+ 部分表示字符串末尾的一个或多个 0 到 9 的数字。

目标字段中任何不以 SWA 开头或后面没有代表航班号的数字的值都将被过滤器丢弃。

02/15/1973

[0-1][0-9][/][0-3][0-9][/][0-1][0-9][0-9][0-9]

诸如“0 到 1”、“0 到 3”和“0 到 9”等的数字范围用于指定 mm/dd/yy 日期字符串的预期值。两位数月份后接两位数日期和四位数年份的值,如果不是用斜线 (/) 分隔,都将被过滤器丢弃。

3.14159

^[-+]?[0-9]*\.?[0-9]+$

此模式验证了目标字段中的字符串可编译为数值。RegEx 模式中的星号 (*) 代表零个或更多个前面的字符;问号 (?) 表示零个或一个前面的字符。反斜线的意思是“.”表示真正的小数点,而不是通配符 (*)。该模式使浮点值的整数部分中必须包含一个正号 (+) 或负号 (-),并可包含小数点(可出现零次)。

正则表达式示例