Haversine在MySQL中存储了函数

时间:2016-05-18 14:55:48

标签: mysql

我要创建一个存储函数来计算两点之间的距离。但是我无法让它发挥作用。这是我目前正在使用的代码。

DROP FUNCTION `haversine`//
CREATE DEFINER=`-----`@`%` FUNCTION `haversine`(givenLat DOUBLE, givenLong DOUBLE) RETURNS double
    DETERMINISTIC
BEGIN 
  DECLARE dist double;
  DECLARE longitude varchar(255);
  DECLARE latitude varchar(255);

  SET longitude = 'Longitude';
  SET latitude = 'Latitude';


  SET dist = (6371 * acos( cos( radians
    (givenLat) ) * cos( radians
    ( latitude ) ) * cos( radians
    ( givenLong ) - radians
    (longitude) ) + sin( radians
    (givenLat) ) * sin( radians
    ( latitude ) ) ));
  RETURN dist;
END

以下查询在返回内容时不返回任何结果。

SELECT id FROM location_address WHERE haversine(lat, long) < 30;

因为当我手动执行(相同的?)查询时,它会返回结果:

SELECT id,  (6371 * acos( cos( radians
    (lat) ) * cos( radians
    ( Latitude ) ) * cos( radians
    ( long ) - radians
    (Longitude) ) + sin( radians
    (lat) ) * sin( radians
    ( Latitude ) ) )) AS distance 
FROM table HAVING distance < 30

我当然使用相同的坐标来尝试两个查询,但我真的无法弄清楚为什么函数不会产生任何结果。

我真的需要一个存储函数才能执行查询。

1 个答案:

答案 0 :(得分:0)

我仍然不知道它为什么会起作用,但是将列名直接传递给函数作为给定的参数,而不是在函数本身中声明它们。