如何找到来自 2 个不同 KSQL 流的 2 个经纬度对之间的距离

how to find the distance between 2 lat-lon pair coming from 2 different KSQL streams

我有一个 KSQL 数据流名称 'stream_car_1',它以经纬度对流的形式给出了它的当前位置。我有另一个 KSQL 数据流 'stream_car_2',它以经纬度对流的形式给出了它的当前位置。我每次都必须实时找到这两辆车之间的地理距离。这可以通过 KSQL 实现吗?如果是,怎么做?

在不知道你的确切数据模型的情况下很难给出具体的答案,但这里有一个例子:

  1. 直接通过新流创建测试主题:

    ksql> CREATE STREAM CAR1 (ID INT, LAT DOUBLE, LON DOUBLE) WITH (KAFKA_TOPIC='car1', VALUE_FORMAT='AVRO', PARTITIONS=1);
    
    Message
    ----------------
    Stream created
    ----------------
    ksql> CREATE STREAM CAR2 (ID INT, LAT DOUBLE, LON DOUBLE) WITH (KAFKA_TOPIC='car2', VALUE_FORMAT='AVRO', PARTITIONS=1);
    
    Message
    ----------------
    Stream created
    ----------------
    
  2. 添加一些测试数据

    ksql> INSERT INTO CAR1 (ID, LAT, LON) VALUES (1,53.917719, -1.801575);
    ksql> INSERT INTO CAR2 (ID, LAT, LON) VALUES (1,53.910515, -1.788787);
    
  3. 从题目开始查询

    ksql> SET 'auto.offset.reset' = 'earliest';
    Successfully changed local property 'auto.offset.reset' to 'earliest'. Use the UNSET command to revert your change.
    
  4. 进行流-流连接,使用GEO_DISTANCE函数进行计算:

    ksql> SELECT GEO_DISTANCE(C1.LAT, C1.LON, C2.LAT, C2.LON, 'KM') AS DISTANCE_BETWEEN_KM 
            FROM CAR1 C1 
                 LEFT JOIN CAR2 C2 
                   WITHIN 10 MINUTES 
                   ON C1.ID=C2.ID 
            EMIT CHANGES;
    +----------------------+
    |DISTANCE_BETWEEN_KM   |
    +----------------------+
    |1.1589376248164969    |