可能下一个项目会用得着,就到网上找了个算法改成oracle的函数,也不知道有多准确。
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;
/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/177967/viewspace-374946/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/177967/viewspace-374946/