SQLSERVER函数,算两个经纬度间的距离

SQLSERVER函数,算两个经纬度间的距离

CREATE FUNCTION getDistatce (@relat double,@p_lat double,@relng double,@p_lng double)
returns double
AS
BEGIN
DECLARE R double,distance double,dLat double,dLon double,a double;

SET R = 6371.0,distance = 0.0,dLat = (@relat - @p_lat)*PI() /180,dLon = (@relng - @p_lng)*PI() /180;
SET a = SIN(dLat/2)*SIN(dLat/2) + COS(@p_lat*PI()/180) *COS(@relat*PI()/180) *sin(dLon/2)*SIN(dLon/2);

SET distance = floor((2*ATAN(SQRT(a),SQRT(1-a)))*R*1000);

RETURN distance;
END
GO

这段函数是出错的 ,求大神修正或重新写一个函数
感谢各位

 CREATE FUNCTION [f_GetDistance]  
(   
@GPSLng DECIMAL(12,6),  
@GPSLat DECIMAL(12,6),  
@Lng  DECIMAL(12,6),  
@Lat DECIMAL(12,6)  
)  
RETURNS DECIMAL(12,4)  
AS  
BEGIN  
   DECLARE @result DECIMAL(12,4)  
   SELECT @result = 6378137.0*ACOS(SIN(@GPSLat/180*PI())*SIN(@Lat/180*PI())+COS(@GPSLat/180*PI())*COS(@Lat/180*PI())*COS((@GPSLng-@Lng)/180*PI()))  
   RETURN @result  
END  
GO 

http://blog.csdn.net/cx067261/article/details/51859001

DELIMITER $$
CREATE FUNCTION getDistatce (relat DOUBLE,p_lat DOUBLE,relng DOUBLE,p_lng DOUBLE)
RETURNS DOUBLE
BEGIN
DECLARE R DOUBLE;
DECLARE distance DOUBLE;
DECLARE dLat DOUBLE;
DECLARE dLon DOUBLE;
DECLARE a DOUBLE;

SET R = 6371.0,distance = 0.0,dLat = (relat - p_lat)*PI() /180,dLon = (relng - p_lng)*PI() /180;
SET a = SIN(dLat/2)*SIN(dLat/2) + COS(p_lat*PI()/180) *COS(relat*PI()/180) *SIN(dLon/2)*SIN(dLon/2);

SET distance = FLOOR((2*ATAN(SQRT(a),SQRT(1-a)))*R*1000);

RETURN distance;
END$$

DELIMITER ;
多测试测试 参数不要加@,申明不要合在一起写