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。