处理器
在本主题中
- 缓冲区创建器
- 凸多边形创建器
- 差创建器
- 包络创建器
- 字段计算器
- 字段计算器(正则表达式)
- 字段丰富器(要素服务)
- 字段丰富器(文件)
- 字段映射器
- 字段缩减器
- 地理标记器
- 事件检测器
- 相交器
- 无操作
- 投影器
- 简化器
- 对称差集创建器
- 追踪间距检测器
- 并集创建器
处理器是 GeoEvent 服务中的组件,用于在 GeoEvent 从输入传输到输出期间对 GeoEvent 执行识别或丰富等特定操作。
在创建所有处理器时,必须分配名称。名称应区分大小写,并将用于在 GeoEvent 服务中唯一识别处理器。如下所示,正在创建的处理器类型可通过处理器下拉箭头指定。
GeoEvent 扩展模块 包括以下处理器:
- 缓冲区创建器
- 凸多边形创建器
- 差创建器
- 包络创建器
- 字段计算器
- 字段计算器(正则表达式)
- 字段丰富器(要素服务)
- 字段丰富器(文件)
- 字段映射器
- 字段缩减器
- 地理标记器
- 事件检测器
- 相交器
- 无操作
- 投影器
- 简化器
- 对称差集创建器
- 追踪间距检测器
- 并集创建器
缓冲区创建器
缓冲区创建器处理器可用于在 GeoEvent 几何周围动态创建缓冲区。该处理器需要指定包含 GeoEvent 几何的字段。应用于 GeoEvent 定义中字段的字段名称或标签可用来标识几何字段。
可以配置该处理器以使用所得缓冲区来代替 GeoEvent 几何或者将所得缓冲区放在新字段中。通过添加新字段来更改 GeoEvent 方案需要 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
创建几何缓冲区时,必须为缓冲区指定线性单位和数值距离。GeoEvent 扩展模块不支持以角度单位(例如十进制度)进行测量的缓冲区。缓冲区创建器界面提供常用线性单位(如英尺、码、米、千米和海里)列表。GeoEvent 扩展模块 管理员可以通过 ArcGIS GeoEvent Manager 为处理器配置单位。缓冲距离指定为一个正整数值。
计算缓冲区时,除了与正在缓冲的几何相关的投影之外,有时需要另指定一个投影。例如,在 WGS84 坐标系中接收到的点位置不能在同一个坐标系中缓冲。而应选择大概位于预期事件几何的预期范围中央的投影坐标系。除了与所接收的 GeoEvent 几何相关的投影之外,另指定一个投影后,使用最合适投影的数值熟知标识符 (WKID)。
有关缓冲区创建器处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
凸多边形创建器
如果需要动态生成表示包围 GeoEvent 几何的最小区域的面,则可使用凸多边形创建器处理器。在概念上,凸多边形表示在 GeoEvent 几何周围拉伸后弹性连接产生的形状。
- 给定一个点,该处理器将生成一个等效的点。
- 给定一条带两个折点的线,该处理器将生成一条等效的线。
- 给定一个简单凸面或包络矩形,该处理器将生成一个等效的几何。
- 否则,该处理器将生成包含 GeoEvent 几何的最小凸面。
凸多边形创建器需要指定包含 GeoEvent 几何的字段。应用于 GeoEvent 定义中字段的字段名称或标签可用来标识几何字段。
可以配置凸多边形创建器来使用已生成的凸多边形代替 GeoEvent 几何或者将凸多边形放在新几何字段中。通过添加新字段来更改 GeoEvent 方案需要 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
有关凸多边形创建器处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
差创建器
如需确定 GeoEvent 几何和 GeoFence 之间的交集,然后将与 GeoEvent 几何相交的 GeoFence 部分裁剪掉或删除,则可使用差创建器处理器。
差创建器需要指定两个离散几何。您不能使用正则表达式指定几个不同的 GeoEvent 或者将每个 GeoFence 的相交部分从 GeoEvent 几何中删除。处理器还需要 GeoFence 的维数等于或大于 GeoEvent 几何的维数 - 您不能从一条折线中裁掉或去掉一个点(或者不能从一个面中去掉一条折线)。
可以配置差创建器以使用两个几何的所得差代替 GeoEvent 几何或者将所得差放在新的几何字段中。通过添加新字段来更改 GeoEvent 方案需要 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
有关差创建器处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
包络创建器
包络创建器可用来生成包围 GeoEvent 几何的简单矩形包络。与凸多边形创建器处理器相反,后者用于生成表示包围 GeoEvent 几何的最小区域的面,但凸多边形不总是矩形,而包络始终为矩形。
- 给定一个点,该处理器将生成一个等效的点。
- 给定纬度不同的多个点或具有多个折点的线,该处理器将生成一个包络。如果几何的所有折点均在同一个纬度上,则无法生成有效包络。
包络创建器需要指定包含几何的 GeoEvent 字段。应用于 GeoEvent 定义中字段的字段名称或标签可用来标识几何字段。
可以配置包络创建器来使用已创建的包络代替 GeoEvent 几何或者将该包络放在新的几何字段中。通过添加新字段来更改 GeoEvent 方案需要 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
有关包络创建器处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
字段计算器
字段计算器处理器可用来计算值。该处理器可评估一个表达式以生成所需的值。表达式可包括文本字符串和数值常量,以及从正在处理的 GeoEvent 的命名字段中获取的事件数据。可将计算所得值写入现有字段,同时覆盖该字段中的现有数据,或者将该值写入由处理器创建的新字段中。
字段计算器是一款通用处理器。给定一段用英尺表示的距离后,可使用 Distance * 0.3048 等相对常量表达式计算以米为单位的等效距离。该处理器还支持多种 Java 字符串函数,例如,表达式 replaceAll(Description, 'foo', 'bar') 可用于在每个 GeoEvent 的描述字段中用子字符串“bar”来代替子字符串“foo”。处理器还支持许多数学函数。例如,可以使用 max(Time1, Time2) 识别两个 GeoEvent 字段中哪一字段包含更大值,或者使用 random() 生成随机数。
使用字段计算器时应考虑以下几点:
- 表达式可以是数学性的或词汇性的(基于字符串,而非数值)。
- 使用文本字符串时,确保使用单引号将这些字符串引起来:'Cat' + ' ' + 'Dog'。
- 如果类型转换失败或无法评估表达式,则处理器将输出空值。
- 表达式中的操作数可以是 GeoEvent 定义中的文字字段名称或者是应用到字段中的标签。例如,表达式 Odom1 + Odom2 可用于将 Odom1 和 Odom2 字段中的值相加,以获得简单总和。如果 Odom1 字段标记为 MILEAGEA 且 Odom2 字段标记为 MILEAGEB,则可以使用表达式 MILEAGEA + MILEAGEB。
- 可以很好地处理表达式中不同类型的数据。例如,325 + 0.125 将转换为等效的 325.0 + 0.125。如果指定输出字段预计为一个长整型值,则计算出的双精度值将被截断。
- 创建表达式时应小心溢出。例如,表达式 60 * 60 * 80 * 10000 中的每一项均为短整型,但结果超出常规整型的 32 位范围。如果像 60.0 * 60.0 * 80.0 * 10000.0 这样以双精度值表示每一项,则可避免上述问题。
- 将计算值写入新字段会更改 GeoEvent 的方案,这需要 GeoEvent 扩展模块 创建新的 GeoEvent 定义。在使用该处理器创建新字段时,必须指定字段名称和数据类型。可以为 GeoEvent 定义指定名称以及可选标签,如果指定了名称,则应将此名称应用于所得 GeoEvent 定义中的新字段。
字段计算器处理器支持的运算符和函数如下所示。
操作 | 运算符 | 示例 |
加 |
|
表达式会将字段 Odom1 和 Odom2 中的数值相加,以获得简单总和。同时,支持字符串串联(例如,"Hello" + "World")。 |
减 |
|
表达式会将标记为 VALUEA 和 VALUEB 的字段中的数值相减,以获得简单差值。 与支持字符串串联的加法不同,你不能使用减法计算两个字符串间的差值。 |
乘 |
|
表达式会将名为 Altitude 字段中的数值和常数 0.3048 相乘,以获得简单乘积(此案例是将以英尺计的值转换为以米计的等效值)。 |
除 |
|
表达式会用名为 Distance 的字段中的数值除以常数 1.609344,以获得简单的商(将以千米计的值转换为以英里计的等效值)。 |
模 |
|
表达式用标记为 VALUEA 的字段中的数值除以标记为 VALUEB 的字段中的数值,并以双精度值形式返回余数。 |
逻辑与 (AND) |
|
表达式对名为 Flag1 和 Flag2 的字段中的布尔值执行逻辑与 (AND) 运算,以获得布尔型结果。输入字段必须为布尔型。表达式中的文本字符串(如 TRUE)和常量值(如 1)不会转换为属于评估一部分的等效布尔值。 |
逻辑或 (OR) |
|
表达式对名为 Flag1 和 Flag2 的字段中的布尔值执行逻辑或 (OR) 运算,以获得布尔型结果。 |
逻辑非 (NOT) |
|
表达式对字段 Flag1 中的布尔值执行逻辑非运算,以获得布尔型结果。支持嵌套表达式,如 !(Flag1 && Flag2)。 |
大于 |
|
表达式会执行逻辑评估,以确定字段 Altitude 中的值是否大于指定的常数(结果为布尔值)。 |
大于等于 |
|
表达式会执行逻辑评估,以确定字段 Altitude 中的值是否大于或等于指定的常数(结果为布尔值)。 |
小于 |
|
表达式会执行逻辑评估,以确定字段 Altitude 中的值是否小于指定的常数(结果为布尔值)。 |
小于等于 |
|
表达式会执行逻辑评估,以确定字段 Altitude 中的值是否小于或等于指定的常数(结果为布尔值)。 |
等于 |
|
表达式会执行逻辑评估,以确定标记为 VALUEA 和 VALUEB 的字段中的值是否相等(结果为布尔值)。只有初始产品版本 (10.2.0) 中的数字类型支持相等运算。 |
不等于 |
|
表达式会执行逻辑评估,以确定标记为 VALUEA 和 VALUEB 的字段中的值是否不相等(结果为布尔值)。只有初始产品版本 (10.2.0) 中的数字类型支持不等于运算。 |
注:
显示混合类型时,字段计算器处理器会试图自动转换值。例如,表达式 10.0 + 5 会自动转换为将总和处理为两个浮点值相加的结果。将数值和字符串值混合(例如 codeValue + "SomeString",其中 codeValue 是数值)会生成未指定的结果。正确的方法为使用字符串函数(例如下述的 valueOf(object))将 codeValue 明确转换为字符串。注:
字段计算器处理器等于和不等于运算符不应该直接应用于浮点值。为正确比较两个十进制值是否相等,必须首先对数值进行进位运算,将数值取整为长整数,然后比较这些长整数值。
- 不比较 MyFloat1 == MyFloat2。
- 而比较 round(MyFloat1*1000) == round(MyFloat2*1000)。
字段计算器处理器包括可对 java.lang.Math 中所得结果进行镜像处理的函数。有关完整的技术规范和函数列表,请参考 Java 开发者文档。最常用函数的汇总如下。
常量 | |
函数 | 说明 |
E() | 返回以欧拉数 (e) 为底并以指定双精度值为指数的幂 |
PI() | 返回以双精度表示的 pi(圆的周长与直径之比) |
常用函数 | |
函数 | 说明 |
abs(value) | 返回参数的绝对值 |
ceil(double) | 返回指定双精度值的上限(接近的最大整数) |
floor(double) | 返回指定双精度值的下限(接近的最小整数) |
hypot(double x, double y) | 返回不含中间溢出或下溢的 sqrt((x*x) + (y*y)) |
max(value a, value b) | 返回 2 个指定参数值中较大的值 |
min(value a, value b) | 返回 2 个指定参数值中较小的值 |
random() | 返回大于等于 0.0 并小于 1.0 的双精度值 |
round(value) | 返回最接近参数的长整数(假设参数为双精度值) |
注:
字段计算器处理器会在可能的情况下处理数值类型转换。例如,当为函数(例如 max(3.14159,25))提供的数值类型不同时,为执行比较,会将这些值转换为可比类型(整型、浮点型或双精度型)。将计算值写入事件的属性字段时,处理器会对这些值进行转换(例如,在事件字段的类型为双精度时,6 + 7 将作为 13.0 写入)。
指数 | |
函数 | 说明 |
sqrt(double) | 返回指定双精度值的平方根 |
cbrt(value) | 返回指定双精度值的立方根 |
exp(double) | 返回以欧拉数 (e) 为底并以指定双精度值为指数的幂 |
pow(double, double) | 返回以第一个参数为底并以第二个参数为指数的幂 |
对数 | |
函数 | 说明 |
log(double) | 返回双精度值的自然对数(以 e 为底) |
log10(double) | 返回双精度值的以 10 为底的对数 |
字符串函数 | |
函数 | 说明 |
int length(source) | 返回字符串的长度。 |
boolean isEmpty(source) | 如果源的长度为 0,则返回 true。 |
boolean isNull(source) | 如果源值为空,则返回 true。 |
boolean equals(source, Object anObject) | 将源字符串与指定的对象进行比较。如果给定的对象表示一个与源字符串相同的字符串,则返回 true;否则返回 false。 |
boolean equalsIgnore(source, String anotherString) | 不考虑大小写的情况下,将源字符串与另一字符串进行比较。如果这两个字符串的长度相等并且其中的相应字符相同(不区分大小写),则两个字符串将被视作相同(不区分大小写)。如果参数非空并且表示等效字符串(不区分大小写),则返回 true;否则返回 false。 |
int compareTo(source, String prefix) | 按字母顺序将两个字符串进行比较。如果 str 参数与源字符串相同,则返回值 0;如果按字母顺序进行排序时源字符串在 str 参数之前,则返回小于零的值;如果按字典顺序进行排序时源字符串在 str 参数之后,则返回大于零的值。 |
int compareToIgnore(source, String str) | 按字母顺序将两个字符串进行比较,不区分大小写。如果指定的字符串大于、等于或小于源字符串(不区分大小写),则相应返回一个负整数值、零或一个正整数值。 |
boolean startsWith(source, String prefix) | 测试源字符串是否以指定的前缀开头。如果由前缀参数表示的字符序列与由源字符串表示的字符序列的前缀相同,则返回 true,否则返回 false。 |
boolean endsWith(source, String suffix) | 测试源字符串是否以指定的后缀结束。如果由后缀参数表示的字符序列与由源对象表示的字符序列的后缀相同,则返回 true,否则返回 false。 |
int indexOf(source, String str) | 返回源字符串中首次出现指定子字符串 str 的索引。如果字符串参数以源对象中的子字符串形式出现,则返回首个这种子字符串的第一个字符的索引;如果字符串参数没有以子字符串的形式出现,则返回 -1。 |
int indexOf(source, String str, int fromIndex) | 从指定的索引开始,返回源字符串中首次出现指定子字符串的索引。从指定的索引开始,返回源字符串中首次出现指定子字符串的索引。 |
int lastIndexOf(source, String str) | 返回源字符串中最右侧出现指定子字符串时的索引。如果字符串参数作为源对象的子字符串出现一次或多次,则返回最后一个这种子字符串的第一个字符的索引。如果字符串参数没有以子字符串的形式出现,则返回 -1。 |
int lastIndexOf(source, String str, int fromIndex) | 从指定的索引开始向后搜索,返回源字符串中最后出现指定子字符串的索引。返回源字符串中最后出现指定子字符串时的索引。 |
String substring(source, int beginIndex) | 返回一个新字符串,该字符串为源字符串的子字符串。该子字符串以指定的索引中的字符开头,并延长至源字符串的末尾。 |
String substring(source, int beginIndex, int endIndex) | 返回一个新字符串,该字符串为源字符串的子字符串。该子字符串以指定的 beginIndex 开头,并延长至索引 endIndex - 1 中的字符。 |
String concat(source, String str) | 将指定的字符串连接在源字符串的末尾。 |
boolean matches(source, String regex) | 判断源字符串是否与给定的正则表达式相匹配。仅当源字符串与给定的正则表达式匹配时才返回。 |
boolean contains (source, CharSequence s) | 仅当源字符串包含 char 值的指定序列时返回 true。如果源字符串包含 s,则返回 true,否则返回 false。 |
String replaceFirst(source, String regex, String replacement) | 用给定的替代替换与给定的正则表达式相匹配的源字符串的首个子字符串。返回得到的字符串。 |
String replaceAll(source, String regex, String replacement) | 用给定的替代替换与给定的正则表达式相匹配的源字符串的每个子字符串。返回得到的字符串。 |
String replace(source, CharSequence target, CharSequence replacement) | 用指定的文本替换序列替换与文本目标序列相匹配的源字符串的每个子字符串。该替换从字符串的开头进行到其结尾。返回得到的字符串。 |
String toLowerCase(source) | 使用默认区域规则将源字符串中的所有字符转换成小写形式。返回该字符串,将其转换为小写形式。 |
String toUpperCase(source) | 使用默认区域规则将源字符串中的所有字符转换成大写形式。返回该字符串,将其转换为大写形式。 |
String trim(source) | 返回源字符串的副本,忽略前导或尾随空白区。 |
String valueOf(source, Object obj) | 返回 Object 参数的字符串表示。 |
三角函数 | |
函数 | 说明 |
acos(double) | 返回值的反余弦值(返回角度范围为从 0.0 到 pi) |
asin(double) | 返回值的反正弦值(返回角度范围为从 -pi/2 到 pi/2) |
atan(double) | 返回值的反正切值(返回角度范围为从 -pi/2 到 pi/2) |
atan2(double y, double x) | 返回由直角坐标 (x, y) 转换为极坐标 (r, theta) 而得到的角 theta |
cos(double) | 返回角的三角余弦值 |
cosh(double) | 返回双精度值的双曲余弦值 |
sin(double) | 返回角的三角正弦值 |
sinh(double) | 返回双精度值的双曲正弦值 |
tan(double) | 返回角的三角正切值 |
tanh(double) | 返回双精度值的双曲正切值 |
toDegrees(double) | 将以弧度为单位的角转换为以度为单位的近似角 |
toRadians(double) | 将以度为单位的角转换为以弧度为单位的近似角 |
字段计算器(正则表达式)
可使用字段计算器(正则表达式)处理器使用正则表达式功能在目标字段中识别模式并从接收到的事件中提取子字符串。已提取的子字符串要么被写回目标字段以代替字段原始值,要么被写入新字段。该处理器不支持上述字段计算器处理器所支持的常规数学表达式、词汇表达式和逻辑表达式。
注:
为该处理器指定字段名称参数时,应将该字段名称括在 ${…} 中。这不同于上述字段计算器处理器,后者无需将 GeoEvent 字段名称括起来。
注:
字段计算器(正则表达式)处理器不支持指定正则表达式模式中的反向引用。
将计算值写入新字段会更改该 GeoEvent 的方案,这需要 GeoEvent 扩展模块 创建新的 GeoEvent 定义。在使用该处理器创建新字段时,必须指定字段名称和数据类型。可以为 GeoEvent 定义指定名称以及可选标签,如果指定了名称,则应将此名称应用于所得 GeoEvent 定义中的新字段。
字段丰富器(要素服务)
字段丰富器(要素服务)处理器可使用发布要素服务的要素图层或非空间表的属性数据丰富 GeoEvent。这些属性将作为新字段附加到正在处理的 GeoEvent 中。该处理器需要指定一个已注册的 ArcGIS Server 连接;配置该处理器时,必须指定服务文件夹、要素服务名称及要素服务内的目标图层。将从丰富源传递每个追加字段的数据类型 - 这些数据类型不会指定为处理器配置的一部分。
GeoEvent 丰富依赖于数据库专业人员称作表连接的内容。可以指定要素服务表中的字段名称以及用于执行连接的 GeoEvent 字段的名称。尽管必须提供要素服务表中的实际字段名称,但可使用 GeoEvent 字段名称或应用在 GeoEvent 定义(与正在处理的事件相关)中的字段的标签来指定将用于执行连接的 GeoEvent 字段。
使用处理器属性对话框通过选择字段或使用键盘手动键入,可构建要包含在丰富中的字段的逗号分隔列表。另外,也可采用另一个逗号分隔值列表的形式指定 GeoEvent 扩展模块应用于每个新建字段的标签。
GeoEvent 丰富需要通过 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义来更改 GeoEvent 方案。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
有关字段丰富器(要素服务)处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
字段丰富器(文件)
字段丰富器(文件)处理器可使用系统文件中所含的属性数据而不是发布要素服务中的属性数据丰富 GeoEvent。通过系统文件丰富 GeoEvent,需要包含该文件的系统文件夹以数据存储形式注册到 GeoEvent 扩展模块。指定注册的系统文件夹后,处理器即可从一个命名文件中检索丰富数据。
注:
使用文本文件作为丰富源时,文件必须采用下图所示的格式。具体来说,文件的第一行必须以逗号分隔值的形式标识字段名称。第二行必须指定每个字段的数据类型。从文件的第三行开始输入文件数据值。
PilotName,PilotPhone,PilotYearsOfService,PilotActive String,String,Integer,Boolean Adam Mollenkopf,111-111-1111,4,TRUE Ryan Elliott,222-222-2222,7,TRUE Javier Delgadillo,333-333-3333,12,TRUE Vlad Plechnoy,444-444-4444,10,TRUE NickBrezovar,555-555-5555,5,TRUE
GeoEvent 丰富依赖于数据库专业人员称作表连接的内容。可以指定要素服务表中的字段名称以及用于执行连接的 GeoEvent 字段的名称。尽管必须提供要素服务表中的实际字段名称,但可使用 GeoEvent 字段名称或应用在 GeoEvent 定义(与正在处理的事件相关)中的字段的标签来指定将用于执行连接的 GeoEvent 字段。
使用处理器属性对话框通过选择字段或使用键盘手动键入,可构建要包含在丰富中的字段的逗号分隔列表。另外,也可采用另一个逗号分隔值列表的形式指定 GeoEvent 扩展模块应用于每个新建字段的标签。
GeoEvent 丰富需要通过 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义来更改 GeoEvent 方案。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
有关字段丰富器(文件)处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的GeoEvent 扩展模块 入门教程。
字段映射器
字段映射器处理器可用于将一个 GeoEvent 方案中的数据转换(或映射)到另一个 GeoEvent 方案或 GeoEvent 定义。每个 GeoEvent 均具有关联的 GeoEvent 定义,该定义可标识属性字段和数据类型。如果处理 GeoEvent(例如为 GeoEvent 添加新字段),则 GeoEvent 定义将发生更改。
若要配置字段映射器,则请选择一个源 GeoEvent 定义和目标 GeoEvent 定义。目标 GeoEvent 定义中的字段显示在右侧,可通过所选源 GeoEvent 定义中的下拉列表选择适当的映射字段。显示每个字段的数据类型以帮助识别适合每个字段的映射。
在一个处理阶段中适合 GeoEvent 的 GeoEvent 定义可能与已发布要素服务的方案不一致。GeoEvent 将需要由字段映射器进行处理,以在 GeoEvent 服务能够更新要素服务中的要素前转换所有 GeoEvent 方案,使其与目标要素的方案相匹配。
例如,许多实时数据流(尤其是提供通用 JSON 的数据流)经常提供的数据结构包含带有子字段的组或者带有多个值的列表。此类数据结构与数据结构是平面的要素服务方案不一致,需要离散数据类型 (日期、串、整型等)。字段映射器的首要目的是将层级结构变平并使这些结构与要素服务方案一致。
字段映射器的一些其他常见用途包括:
- 由于指定一个目标 GeoEvent 定义会确立从字段映射器发出的 GeoEvent 方案,因此处理器可以有效减少从输入传输到输出的属性字段数。只需使用所需字段来创建 GeoEvent 定义,然后使用字段映射器减少字段数量并使 GeoEvent 服务接收的 GeoEvent 与所需输出方案一致。
- 字段映射器可用来执行某些基础数据的转换。例如,可将包含整型数据的 GeoEvent 字段转换为较长的数据值或者双精度表示的数据值。可以转换数值以创建字符串表示的数据。如果字段映射器无法完成数据类型转换,则映射字段中将写入空值。
注:
如要在已发布的要素服务中更新要素,并且不想修改现有要素的一个或多个字段,那么在字段映射器中不映射这些字段,将导致在更新要素时写入空值。先使用字段缩减器(参见下文)移除未映射字段,然后再向负责要素服务更新的输出连接器发送 GeoEvent。
字段缩减器
如需从 GeoEvent 中移除字段,可使用字段缩减器处理器。该处理器可从正在处理的 GeoEvent 中有效删除属性数据,从而允许传输 GeoEvent 的简化表示以作额外处理或将其发送至输出。配置字段缩减器时,以逗号分隔的列表形式指定将要移除的字段。
字段缩减需要通过 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义来更改 GeoEvent 方案。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。最后,为新生成的 GeoEvent 定义指定一个名称。
地理标记器
地理标记器处理器可使用感兴趣区域(也称为 GeoFence)的名称丰富 GeoEvent,GeoEvent 几何与 GeoFence 之间存在特定的空间关系。
地理标记是事件丰富和空间过滤的特例。例如,可配置地理标记器以追加任何 GeoFence(在其中可找到 GeoEvent 几何)的名称。由地理标记器处理的 GeoEvent 将追加一个含有任何 GeoFence(在其中可找到 GeoEvent 几何)名称的字段。
注:
在配置地理标记器处理器之前,必须将 GeoFence 从要素服务导入 GeoEvent 扩展模块。有关在 GeoEvent 扩展模块 中使用 GeoFence 的详细信息,请参阅管理 GeoFence。
地理标记器的配置必须包括一个或多个指定要考虑的 GeoFence 的简单正则表达式。例如,将美国 50 个州的多边形区域均导入名为 UnitedStates 的类别中,将美国西部各郡的多边形区域导入名为 Counties 的类别中。可使用以逗号分隔的列表形式指定地理标记器应考虑的 GeoFence,例如 Counties/.*, UnitedStates/.*。
请注意上述示例中两个正则表达式用逗号分开。第一个表达式指定了 Counties 类别中将要考虑的任何已命名的 GeoFence,而第二个表达式包含 UnitedStates 类别中任何已命名的 GeoFence。
配置地理标记器时,必须选择一个空间运算符来指定满足条件的关系,以便处理器对 GeoEvent 进行标记。例如,您可能希望使用与 GeoEvent 面相交的任何 GeoFence 名称来标记 GeoEvent,从而实现对 GeoEvent 的丰富。
地理标记器支持各种空间运算符,其中包括:包含、交叉、不相交、进入、等于、退出、内部、相交、外部、重叠、接触和被包含。这些运算符假定,任何能够满足运算符的已定义空间关系且被考虑在内的 GeoFence 足可触发地理标记器来丰富正被处理的 GeoEvent。
例如,如果选择“相交”空间运算符并考虑对不重叠感兴趣区域建模的几十个 GeoFence,则区域与 GeoEvent 几何相交的所有 GeoFence 名称将被添加到正被处理的 GeoEvent 中。
注:
常常将 GeoFence 视为对感兴趣区域建模,这表示 GeoFence 始终为面几何。正如受支持的空间运算符列表表明,GeoFence 也可以是点几何或折线几何。可以对与 GeoEvent 相关的面几何进行测试,以判断该几何是否与几何为点或折线的 GeoFence 存在相交、交叉或包含关系。
当指定包含 GeoEvent 几何的字段的名称时,地理标记器将接受事件字段的名称或应用到 GeoEvent 定义中的某个字段的标签(通常为 GEOMETRY 标签)。
地理标记器需要通过 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义来更改 GeoEvent 方案。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。为新生成的 GeoEvent 定义指定名称,并为地理标记器将写入已丰富值的字段指定名称。
有三个选项可供地理标记器设置已丰富值的格式。分隔值表示 GeoFence 名称应以简单的逗号分隔的列表形式写入。其他两个选项将已丰富值的格式规定为 JSON 列表或 JSON 组内的元素。配置地理标记器以在丰富中包含 GeoFence 类别的名称,并以 GeoFence 的单独类别形式返回美国各州和各郡,地理标记丰富可能采取以下形式:
- 列表:["UnitedStates/California","Counties/San_Bernardino"]
- 组:[{"Category":"UnitedStates","Name":"California"},{"Category":"Counties", "Name":"San_Bernardino"}]
有关地理标记器处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
事件检测器
事件检测器处理器可用来表示,接收的 GeoEvent 满足某些条件并且应打开一个事件。例如,假定数据流报告车辆位置及其当前速度。事件检测器可以在任何车辆超出指定速率时或进入特定感兴趣区域或 GeoFence 时生成事件点。如果从被跟踪车辆接收到新的更新信息,则 GeoEvent 扩展模块 中的持续事件也将得到更新。车辆的行驶速度恢复到安全速率或车辆离开 GeoFence 区域之后,该事件将关闭。
事件检测器与其他处理器的不同之处在于,从该处理器发送的 GeoEvent 不是由该处理器接收的 GeoEvent 的副本(或衍生物)。从该处理器发送的 GeoEvent 与安装 GeoEvent 扩展模块 时创建的事件点 GeoEvent 定义有关。
事件检测器使用指定的属性和空间条件来检测事件、生成新事件以及更新持续事件。开放事件保持持续状态,直到关闭为止。当接收到满足关闭条件的 GeoEvent 或在指定时间段内未接收到与事件相关联的 GeoEvent 时,事件将关闭。
配置事件检测器时,必须指定开启条件;但可以自由选择是否指定关闭条件。如果未指定关闭条件,则将使用开启条件的逻辑非作为隐含的关闭条件。
注:
有关空间关系运算符以及如何构建用于开启条件和关闭条件的属性表达式和空间表达式的详细信息,请参见过滤器。
注:
发送到事件检测器的 GeoEvent 必须具有一个包含 TRACK_ID 的 GeoEvent 定义。处理器使用这个标记字段将创建的事件与接收到的 GeoEvent 相关联(依次与离散对象、车辆、传感器或被监测的其他项目相关联)。
使用事件检测器时,必须指定一个用以识别由处理器打开的事件的名称。例如,为检测超速车辆事件而创建的事件检测器处理器可以将字符串 Speeding Vehicle 与处理器创建的事件相关联。
为事件检测器指定的开启和关闭条件可以基于属性或基于与 GeoFence 的空间关系。类似于过滤器,如果与已接收的 GeoEvent 相关联的数据满足指定表达式,则事件检测器将检测条件并打开新事件、更新持续事件或关闭事件。
可配置该处理器以设置与事件相关的严重性级别。可用的严重性级别分别是通知、警告和紧急。事件限制为单一严重性级别;必须编辑处理器并且重新发布 GeoEvent 服务才能更改严重性级别。
使用事件检测器时,必须指定处理器将要创建的事件的类型:
- 时间点事件没有关闭条件。可将这些事件视为瞬间事件,它们在生成后会立即关闭,因此不具有事件持续时间。
- 累积事件既有开启条件,也有关闭条件。从事件生成到事件过期(或关闭)的这段时间即为事件持续时间。随着附加事件数据的接收,累积事件会由 GeoEvent 扩展模块 进行监控和更新。
每个由事件检测器生成的事件都有一个关联的几何。几何的类型在配置处理器时指定。事件检测器通常配置为将点几何与该处理器创建的事件相关联,从而对发生在特定时间和特定地点的事件进行建模。但是,也对该处理器创建的事件支持多点和折线几何类型。
如果该处理器未在指定时间段内接收到对应事件 TRACK_ID 的更新,则处理器将自动关闭持续事件。配置事件检测器时,指定适当的过期时间(以秒为单位)以定义此行为。如果在计时器倒数完过期时间之前未接收到更新信息,则事件将过期并转换成关闭状态,即使未接收到满足处理器关闭条件的 GeoEvent。为过期时间指定零值可对该处理器创建的事件禁用自动过期功能。
有关事件检测器处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
相交器
相交器处理器可用于生成表示 GeoFence 和 GeoEvent 几何之间的交集的几何。GeoEvent 几何被视为基础 - GeoFence 是用以确定是否存在交集的被评估几何。
注:
两个几何之间的交集大体等于或小于被考虑的几何的几何尺寸。例如,如果 GeoEvent 的相关几何是一个点,即使指定的 GeoFence 几何是一条折线或一个面,交集(假设存在)必为一个点。如果 GeoEvent 的相关几何是一条折线,而指定的 GeoFence 几何为一个面,则交集最有可能是一条线,但也可能是一个点。
相交器需要指定两个离散几何。您将无法使用正则表达式指定若干个不同的 GeoFence,也无法获得每个 GeoFence 与正被处理的 GeoEvent 相关的几何之间的交集。
可以配置该处理器以使用所发现的交集代替 GeoEvent 几何或者将相交几何写入新字段中。向 GeoEvent 添加新字段将更改 GeoEvent 方案,这需要 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
有关相交器处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
无操作
无操作处理器不会采取任何操作,并且对它接收到的 GeoEvent 无任何影响。GeoEvent 经过该处理器时不会受到任何影响。可以在 GeoEvent 服务中将该处理器用作稍后将要配置的实际处理器的占位程序或占位符,这样便可专注于设计和测试 GeoEvent 服务的其他部分。
无操作处理器在下列情况中也是很有用处的:
- 对未按预期运行的已发布 GeoEvent 服务进行故障排除。配置无操作处理器来执行无操作可有效将其从 GeoEvent 服务中移除,而不必强制重绘 GeoEvent 服务的工作流。
- 在完成某个特定组件的开发前设计 GeoEvent 服务中的处理和过滤工作流。完成开发组件后,无操作处理器便可重新配置为另一种类型的处理器。
- 展示如何暂时关闭由 GeoEvent 服务的特定组件执行的处理过程。通过将某个现有处理器配置为无操作处理器并重新发布 GeoEvent 服务,可高亮显示 GeoEvent 扩展模块 正在执行的处理过程。
投影器
事件数据通常用纬度和经度表示地理空间中的坐标值。投影器处理器可将 GeoEvent 几何从本地坐标系投影到另一个空间参考。例如,您可能希望对事件数据进行明确投影以在特定的坐标系环境下查看该数据的坐标值。
建议了解流数据的本地坐标系及其如何关联到已导入的其他空间数据(如 GeoFence)。ArcGIS for Server 和 GeoEvent 扩展模块 通常按需对几何进行投影,因而在常用的空间参考中进行空间评估。ArcGIS for Server 将对接收到的数据进行投影以匹配要素服务的空间参考(例如,在创建或更新要素之前执行该操作)。GeoEvent 扩展模块 将对空间数据进行动态投影,然后再对与 GeoFence 相交的数据进行评估。
若要在 GeoEvent 服务中执行附加过滤或处理步骤之前对 GeoEvent 进行明确投影,请使用该处理器。
该处理器需要指定一个包含几何的字段。可指定 GeoEvent 字段名称或应用于识别几何字段的 GeoEvent 定义中的字段的标签。该处理器还需要输入数据待投影到的坐标系的熟知标识符 (WKID)。例如,WGS 1984 世界地理坐标系的 WKID 是 4326。
注:
有关受支持的坐标系的详细信息,请参见使用空间参考。
可以配置投影器处理器以使用经投影的几何替换 GeoEvent 几何或将经投影的几何放入新字段中。向 GeoEvent 添加新字段将更改 GeoEvent 方案,这需要 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
有关投影器处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
简化器
简化器处理器可用于更正 GeoEvent 相关几何,从而拓扑渲染与其类型一致的几何。简化对点几何不起作用。多点几何将所有折点捕捉到适合几何空间参考的格网中,然后移除重复折点。使用多条路径或多个环来重新构建带有自相交线段的折线几何和面几何,以生成具有正确拓扑的多部分折线或面。
简化与综合不同。简化沿着具有正确拓扑的线段移除不必要的折点或者修整几何以减少细节,从而生成一个能够以较小的地图比例有效展示的几何。简化旨在生成一个能够有效插入地理数据库中的要素。在 ArcGIS for Desktop 编辑会话中创建的要素已经具有正确拓扑且拓扑结构比较简单。在 GeoEvent 服务中处理要素之前,不需要对从要素服务轮询的要素进行简化。
简化器需要指定包含几何的 GeoEvent 字段。可指定 GeoEvent 字段名称或应用于识别几何字段的 GeoEvent 定义中的字段的标签。
可以配置该处理器以使用经简化的几何替换 GeoEvent 几何或将经简化的几何放入新字段中。向 GeoEvent 添加新字段将更改 GeoEvent 方案,这需要 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
有关简化器处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
对称差集创建器
对称差集创建器处理器可用于从两个几何的并集中裁剪或移除 GeoEvent 几何与 GeoFence 的相交部分。两个几何的对称差集实质上是一种排他式的 OR 语句。
对称差集创建器需要指定两个离散几何。您无法使用正则表达式指定若干个不同的 GeoFence,也无法获得几何集合的对称差集。该处理器还要求这些几何为同一类型,因此,您无法将点和折线的对称差集计算成两个几何的并集。
可以配置该处理器以使用计算的对称差集替换 GeoEvent 几何或将计算的对称差集放入新的几何字段中。向 GeoEvent 添加新字段将更改 GeoEvent 方案,这需要 GeoEvent 扩展模块 创建一个新的 GeoEvent 定义。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
有关对称差集创建器处理器的详细信息,请参阅 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。
追踪间距检测器
追踪间距检测器处理器用于检测流数据中事件的缺失。类似于事件检测器,从追踪间距检测器发送的 GeoEvent 不是由该处理器接收的 GeoEvent 的副本(或衍生物)。从该处理器发送的 GeoEvent 与安装 GeoEvent 扩展模块 时创建的 TrackGap GeoEvent 定义有关。
发送到追踪间距检测器处理器的 GeoEvent 必须具有一个包含 TRACK_ID 的 GeoEvent 定义。该处理器使用这个标记字段确定不再接收 GeoEvent 的时间。处理器必须至少接收到一个带有给定 TRACK_ID 的 GeoEvent,才能检测出追踪中缺失的 GeoEvent。
使用追踪间距时,必须指定间距持续时间和间距检测间隔:
- 间距持续时间可指定处理器在确定预期数据未被接收前要等待的秒数。
- 间距检测间隔可指定每次轮询间隔的秒数。
例如,假定将追踪间距处理器的间距检测间隔配置为 120 秒、间距持续时间为 300 秒,则处理器将每两分钟(120 秒)检查一次所接收的 GeoEvent 的内部注册,以查看在过去五分钟(300 秒)内是否未观测到注册表中的任何 TRACK_ID。
间距检测间隔还控制通知生成的频率。将通知模式设置成连续之后,将在每次轮询每个预期(而不是最近收到的)TRACK_ID 的处理器内部注册表时生成新的 TrackGap 事件。如果在首次检测到间距时希望生成单个通知,随后生成第二个事件通知您再次接收预期 GeoEvent 的时间,则需指定待更改通知模式。
最后,配置追踪间距处理器时,可以指定包含几何的 GeoEvent 字段。如果已指定 GeoEvent 字段名称,则该处理器会将最新收到的 GeoEvent 中的几何追加到处理器生成的 TrackGap 事件中。例如,如果数据流报告车辆位置,并且处理器被配置为每隔 30 秒进行一次轮询以确定自上次接收车辆报告以来是否存在至少 120 秒的间距,则可将处理器配置为包含最后报告的车辆位置及其间距通知事件。
并集创建器
并集创建器处理器可生成 GeoEvent 相关几何与作为 GeoFence 导入的一个或多个几何之间的几何并集。该处理器需要指定包含几何的 GeoEvent 字段。可指定 GeoEvent 字段名称或应用于识别几何字段的 GeoEvent 定义中的字段的标签。
可以配置该处理器以使用指定几何的并集来代替 GeoEvent 几何或者将并集放在新的几何字段中。向 GeoEvent 添加新字段将更改 GeoEvent 方案,这需要 GeoEvent 扩展模块创建一个新的 GeoEvent 定义。新的 GeoEvent 定义将由 GeoEvent 扩展模块 管理,并且如果处理器或者该处理器参与的 GeoEvent 服务发生改变,则该定义将被删除。
差处理器、对称差集处理器和相交器处理器等其他处理器仅处理两个离散几何,但并集处理器接受正则表达式,允许指定若干个不同的 GeoFence。因此,您能够获得已接收的 GeoEvent 几何与作为 GeoFence 导入的一个或多个几何之间的并集。
有关并集创建器处理器的详细信息,请参见 GeoEvent 扩展模块 教程中的 GeoEvent 扩展模块 入门教程。