0
2点間の距離を計算するストアドファンクションを作成します。しかし、私はそれを働かせることはできません。ここに私が使用しているコードがあります。MySQLストアドファンクションのHaversine
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
私はもちろん、両方のクエリをしようとすると同じ座標を使用しましたし、私は本当に理解することはできませんなぜその関数は結果をもたらさないのでしょうか?
私は本当にクエリを実行できるストアド関数が必要です。
これをチェックしてください:http://stackoverflow.com/questions/3640448/mysql-user-defined-function-for-latitude-longitude-syntax – dit
なぜ変数を 'SET longitude = 'Longitude';' ?すべての値を数値にする必要がありますか? –
mysqlの地理空間機能に関するものは何ですか? – e4c5