度単位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>