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

WSO2 CEP-Siddhi查询关联不同事件流的坐标,wso2,complex-event-processing,wso2cep,siddhi,Wso2,Complex Event Processing,Wso2cep,Siddhi,我不熟悉WSO2 CEP和Siddhi查询。 我创建了三个不同的事件流,每个流都与特定的传感器有关,如下图所示: 传感器的每个事件流都具有传感器的纬度和经度。传感器放置在不同的坐标上,我想比较/关联它们的坐标(纬度和经度)。如何通过Siddhi查询比较它们的坐标(坐标变化不超过4米)? 非常感谢 Siddhi有一套单独的地理操作系统。 要计算传感器之间的距离,您可以使用 由于要比较传感器距离,因此必须将传感器位置保持在或中。 无论何时传感器位置出现在流中,您都可以将其存储在窗口或表中,并与表中

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

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

Siddhi有一套单独的地理操作系统。 要计算传感器之间的距离,您可以使用

由于要比较传感器距离,因此必须将传感器位置保持在或中。 无论何时传感器位置出现在流中,您都可以将其存储在窗口或表中,并与表中的其他内容连接,获得符合您要求的相关输出(4米以内)


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

Siddhi有一套单独的地理操作程序。 要计算传感器之间的距离,您可以使用

由于要比较传感器距离,因此必须将传感器位置保持在或中。 无论何时传感器位置出现在流中,您都可以将其存储在窗口或表中,并与表中的其他内容连接,获得符合您要求的相关输出(4米以内)


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

Hi!非常感谢您的回复!你能给我解释一下什么是传感器1ID,传感器2ID进入测量流吗?为什么没有其他传感器(如sensor3Id和sensor4Id)?——此外,我尝试了您编写的执行计划,但出现了一个错误(“distance”既不是函数扩展,也不是执行计划“ExecutionPlan”中的聚合属性扩展),您现在知道如何解决此错误了吗?我使用传感器id来区分执行计划内的流。如果没有从您的事件流生成事件id,您可以编写一个简单的查询,如下所示,以使用传感器id增强流。导入流后,您可以立即为来自se的所有流添加以下查询传感器1选择“传感器ID“as id、lat、long插入enhancedSensorStream;您可以添加与我添加的传感器相同的其他两个传感器。作为出现错误的解决方案,请安装本链接中提到的Siddhi gpl功能,非常感谢您的帮助!你好我安装了Siddhi gpl功能,但仍然出现错误“'distance'既不是执行计划“CorrelateCoordinates_ExecutionPlan”中的函数扩展,也不是聚合属性扩展”-您能帮我吗?嗨!非常感谢您的回复!你能给我解释一下什么是传感器1ID,传感器2ID进入测量流吗?为什么没有其他传感器(如sensor3Id和sensor4Id)?——此外,我尝试了您编写的执行计划,但出现了一个错误(“distance”既不是函数扩展,也不是执行计划“ExecutionPlan”中的聚合属性扩展),您现在知道如何解决此错误了吗?我使用传感器id来区分执行计划内的流。如果没有从您的事件流生成事件id,您可以编写一个简单的查询,如下所示,以使用传感器id增强流。导入流后,您可以立即为来自se的所有流添加以下查询传感器1选择“传感器ID“as id、lat、long插入enhancedSensorStream;您可以添加与我添加的传感器相同的其他两个传感器。作为出现错误的解决方案,请安装本链接中提到的Siddhi gpl功能,非常感谢您的帮助!你好我安装了Siddhi gpl功能,但仍然出现错误“'distance'既不是执行计划“CorrelateCoordinates_ExecutionPlan”中的函数扩展,也不是聚合属性扩展”-您能帮助我吗?
/* 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;