weixin_40729743
2017-11-24 09:35
采纳率: 50%
浏览 1.5k

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

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

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • threenewbee 2017-11-24 15:18
    已采纳
     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 
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 髙兴同学 2017-11-24 09:46
    评论
    解决 无用
    打赏 举报
  • lp180361* 2017-11-24 10:02

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题