MariaDB中不存在FUNCTION ST_Distance_Sphere

时间:2017-06-07 09:42:51

标签: database mariadb latitude-longitude

我希望获取我所在位置的所有位置,但功能ST_Distance_Sphere不起作用。

我的查询:

select *, astext(location) as location from `locations`
where ST_Distance_Sphere(location, POINT(35.905069591297, 49.765869174153)) < 1000

错误:

SQLSTATE[42000]: Syntax error or access violation:
1305 FUNCTION app.ST_Distance_Sphere does not exist (SQL:
select *, astext(location) as location from `locations`
where ST_Distance_Sphere(location, POINT(35.905069591297, 49.765869174153)) < 1000)

5 个答案:

答案 0 :(得分:1)

http://mysql.rjweb.org/doc.php/find_nearest_in_mysql#gcdistdeg

该博客讨论了MySQL / MariaDB在全球范围内“寻找最接近”的多种方法。作为讨论的一部分,我开发了该存储功能。

答案 1 :(得分:0)

我在DBA.SE上的答案的直接副本,


MariaDB lacks this ST_Distance_Sphere (MDEV-13467)简直令人难以置信。

找到their support matrix here

不仅如此,它还缺少MySQL拥有的ST_GeoHash

答案 2 :(得分:0)

答案 3 :(得分:0)

对于仍然需要在MariaDB中使用该函数的用户,可以根据公式创建该函数

    CREATE FUNCTION `st_distance_sphere`(`pt1` POINT, `pt2` POINT) RETURNS 
    decimal(10,2)
    BEGIN
    return 6371000 * 2 * ASIN(SQRT(
       POWER(SIN((ST_Y(pt2) - ST_Y(pt1)) * pi()/180 / 2),
       2) + COS(ST_Y(pt1) * pi()/180 ) * COS(ST_Y(pt2) *
       pi()/180) * POWER(SIN((ST_X(pt2) - ST_X(pt1)) *
       pi()/180 / 2), 2) ));
    END

答案 4 :(得分:0)

截至 2021 年 5 月 ST_Distance_Sphere 在 MariaDB 中可用

https://mariadb.com/kb/en/st_distance_sphere/