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 ;
多测试测试 参数不要加@,申明不要合在一起写