WSO2 CEP - Siddhi 查询关联不同事件流的坐标

WSO2 CEP - Siddhi queries correlate coordinates of different event streams

我是 WSO2 CEP 和 Siddhi 查询的新手。 我创建了三个不同的事件流,每个流都与一个特定的传感器有关,如下图所示:

传感器的每个事件流都有传感器的纬度和经度。传感器放置在不同的坐标上,我想 compare/correlate 它们的坐标(纬度和经度)。如何通过 Siddhi 查询比较它们的坐标(坐标相差不超过 4 米)? 非常感谢!

Siddhi 有一套单独的 operations 用于地理操作。 要计算传感器之间的距离,您可以使用 geo distance function.

由于要比较传感器距离,因此必须将传感器位置保持在 window or in a table 内。 每当流中出现传感器位置时,您都可以将其存储在 window 或 table 中,并与其余 table 内容合并并获得相关输出符合您的要求(4米以内)

/* Enter a unique ExecutionPlan */
@Plan:name('ExecutionPlan')

/* Enter a unique description for ExecutionPlan */
-- @Plan:description('ExecutionPlan')

/* define streams/tables and write queries here ... */

@Import('sensor4:1.0.0')
define stream sensor4 (id int, lat double, long double);

@Import('sensor3:1.0.0')
define stream sensor3 (id int, lat double, long double);

@Import('sensor2:1.0.0')
define stream sensor2 (id int, lat double, long double);

@Import('sensor1:1.0.0')
define stream sensor1 (id int, lat double, long double);

@Export('measuredStream:1.0.0')
define stream measuredStream (sensor1Id int, sensor2Id int);

define table sensorTable (id int, lat double, long double);

from sensor1
select *
insert into sensorTable;

from sensor2
select *
insert into sensorTable;

from sensor1 join sensorTable
    on sensorTable.id != sensor1.id and 4 > geo:distance(sensorTable.lat, sensorTable.long, sensor1.lat, sensor1.long)
select sensorTable.id as sensor1Id, sensor1.id as sensor2Id
insert into measuredStream;

from sensor2 join sensorTable
    on sensorTable.id != sensor2.id and 4 > geo:distance(sensorTable.lat, sensorTable.long, sensor2.lat, sensor2.long)
select sensorTable.id as sensor1Id, sensor2.id as sensor2Id
insert into measuredStream;

上面的执行计划将起作用,因为在您创建了 2 个查询之后,每个查询要插入事件 table 并加入事件 table。您可以通过向测量流添加记录器发布者(测量流中的事件将记录在终端中)来验证结果。并使用事件模拟器,模拟事件流程。