指定された座標間の距離を計算する必要がある関数に問題があります。私が見ることができるように、問題は負の値であり、これを解決する方法のアイデアが不足しているため、誰かが私を助けてくれれば本当に感謝しています!
DELIMITER $$
CREATE DEFINER=`sfff_user`@`%` FUNCTION `GetUserDistance`(lat VARCHAR (20), lon VARCHAR (20), userLat VARCHAR (20), userLon VARCHAR (20)) RETURNS int(11)
BEGIN
DECLARE distance INT (11);
IF ISNULL(lat) OR ISNULL(lon) OR lat = '' OR lon = '' THEN
RETURN 0;
ELSE
SELECT
3956 * 2 * ASIN(SQRT(POWER(SIN((lat - ABS(userLat)) * PI() / 180 / 2), 2) + COS(lat * PI() / 180) * COS(ABS(userLat) * PI() / 180) * POWER(SIN((lon - userLon) * PI() / 180 / 2), 2)))
INTO
distance;
RETURN distance;
END IF;
END
たとえば、この呼び出しの結果:
select GetUserDistance(44, 21, 44, 21) as distance;
0は問題ありません
しかし、これを見てください:
select GetUserDistance('-15.4167', '28.2833', '-15.4167', '28.2833') as distance;
正気でない2129です!
私はこれを解決したくてたまらないので、あなたが見てみることができれば、正しい機能を持っていることはとてもいいことです:(
ありがとう。