2016-05-18 7 views
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 

私はもちろん、両方のクエリをしようとすると同じ座標を使用しましたし、私は本当に理解することはできませんなぜその関数は結果をもたらさないのでしょうか?

私は本当にクエリを実行できるストアド関数が必要です。

+0

これをチェックしてください:http://stackoverflow.com/questions/3640448/mysql-user-defined-function-for-latitude-longitude-syntax – dit

+0

なぜ変数を 'SET longitude = 'Longitude';' ?すべての値を数値にする必要がありますか? –

+0

mysqlの地理空間機能に関するものは何ですか? – e4c5

答えて

0

私はそれがなぜ機能するのか正確にはわかりませんが、関数自体で宣言するのではなく、指定されたパラメータが関数として直接関数に渡されます。

関連する問題