oracle

緯度、経度による距離計算ファンクション(PL/SQLで2点の距離計算できます)

度単位10進数形式(*1)で指定した緯度経度から2点の距離をメートルで計算します。
(*1)Google MapやGISで使われている緯度経度の表現形式です。

CREATE OR REPLACE FUNCTION distance_m
/* -----------------------------------------------------------------------
 *  緯度、経度による距離計算
 *
 * -----------------------------------------------------------------------
 */
(
  latitude1  IN number  -- 地点A 緯度
 ,longitude1 IN number  -- 地点A 経度
 ,latitude2  IN number  -- 地点B 緯度
 ,longitude2 IN number  -- 地点B 経度
)
RETURN number
IS
    dist   number(20,8);
    RADIUS CONSTANT NUMBER  := 6371;   -- 地球の半径
    PI     CONSTANT NUMBER  := 3.1415926535897932384626433832795028841971;
BEGIN

if(latitude1=latitude2 and longitude1=longitude2 ) then 
return 0;
end if;

dist := RADIUS * ACOS( 
        COS( latitude1 * PI /180 ) * COS( latitude2 * PI /180 )
        * COS( (longitude2 * PI /180 ) - (longitude1 * PI /180 ) )
        + SIN(latitude1 * PI /180 ) * SIN(latitude2 * PI /180)
        )
;
return dist*1000;
END;
/

使用例
東京タワーとスカイツリーとの距離を計算します。

SQL> select DISTANCE_M(35.658721,139.745408,35.710119,139.810690) from dual
  2  ;

DISTANCE_M(35.658721,139.745408,35.710119,139.810690)
-----------------------------------------------------
                                           8211.41412

SQL>

スポンサーリンク
コピペで使う