【 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 天后被自动关闭。不再允许新回复。