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