Tidb支持计算经纬度距离或者兼容mysql计算位置距离的函数吗?

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】8.1.1
【遇到的问题:需要根据经纬度计算距离

手上的老版本tidb没有发现有类似 MySQL中的 ST_Distance_Sphere

请问目前你手上的是什么版本?


目前仍旧不支持

好的,那请问tidb有什么办法可以接入计算距离的功能吗?

tidb 木有插件的功能,考虑把 tidb 的数据同步到其它组件中计算吗

查看官方文档: 与 MySQL 兼容性对比 | PingCAP 文档中心 ,是不支持,也不支持自定义函数,否则可以:

DELIMITER $

CREATE FUNCTION calculate_distance(lat1 DOUBLE, lon1 DOUBLE, lat2 DOUBLE, lon2 DOUBLE) RETURNS DOUBLE
BEGIN
    DECLARE R DOUBLE;
    DECLARE dLat DOUBLE;
    DECLARE dLon DOUBLE;
    DECLARE a DOUBLE;
    DECLARE c DOUBLE;
    DECLARE distance DOUBLE;

    SET R = 6371;  -- 地球平均半径,单位公里
    SET dLat = RADIANS(lat2 - lat1);
    SET dLon = RADIANS(lon2 - lon1);
    SET a = SIN(dLat / 2) * SIN(dLat / 2) +
            COS(RADIANS(lat1)) * COS(RADIANS(lat2)) *
            SIN(dLon / 2) * SIN(dLon / 2);
    SET c = 2 * ATAN2(SQRT(a), SQRT(1 - a));
    SET distance = R * c;

    RETURN distance;
END$

DELIMITER ;

使用这个函数来计算距离:

sql

SELECT calculate_distance(34.0522, -118.2437, 36.7783, -119.4179) AS distance;

这将计算从洛杉矶(纬度 34.0522, 经度 -118.2437)到优胜美地国家公园(纬度 36.7783, 经度 -119.4179)的距离。

应该是不支持的,可以提需求给官方。

谢谢,感觉比较遗憾。目前想到的方案是把需要计算的一批数据迁移到mysql中作计算,然后再回写到Tidb中。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。