根据两个点坐标计算距离的函数

来源:互联网 发布:伦敦传媒学院 知乎 编辑:程序博客网 时间:2024/05/04 06:27

CREATE OR REPLACE FUNCTION FUNC_DISTANCE (LAT1 NUMBER,LNG1 NUMBER,LAT2 NUMBER,LNG2 NUMBER) RETURN NUMBER
AS

 EARTH_RADIUS NUMBER := 6378.137; --地球半径
 RADLAT1 NUMBER;
 RADLAT2 NUMBER;
 A NUMBER;
 B NUMBER;
 S NUMBER;
 RET NUMBER;
 
 FUNCTION RAD(D NUMBER) RETURN NUMBER
 AS
  RET NUMBER;
 BEGIN
  RET :=  D*3.1415926535897931/180;
   RETURN RET;
 END;

BEGIN
   RADLAT1 := RAD(LAT1);
   RADLAT2 := RAD(LAT2);
   A := RADLAT1 - RADLAT2;
   B := RAD(LNG1) - RAD(LNG2);
   S := 2 * ASIN(SQRT(POWER(SIN(A/2),2) + COS(RADLAT1)*COS(RADLAT2)*POWER(SIN(B/2),2)));
   RET := S * EARTH_RADIUS;
   RETURN RET;
END;
/

0 0
原创粉丝点击