求两个经纬度之间的距离

经常要根据两个经纬度值,求它们之间的距离。

delphi实现代码:

求两个经纬度之间的距离

另一种实现方式:

Code

 

JavaScript实现方式

 

function distance(x1,y1,x2,y2) {

  var R = 6371; // earth's mean radius in km

  var lon1 = x1* Math.PI / 180;

  var lat1 = y1 * Math.PI / 180;

  var lon2 = x2 * Math.PI / 180;

  var lat2 = y2 * Math.PI / 180;

  var deltaLat = lat1 - lat2

  var deltaLon = lon1 - lon2

  var step1 = Math.pow(Math.sin(deltaLat/2), 2) + Math.cos(lat2) * Math.cos(lat1) * Math.pow(Math.sin(deltaLon/2), 2);

  var step2 = 2 * Math.atan2(Math.sqrt(step1), Math.sqrt(1 - step1));

  alert("两点间距离是:" + step2 * R);

 

SQL Server实现代码 :

-- =============================================

-- Author: wanghongsheng

-- Create date: 2009.11.07

-- Description: 计算两个经纬度之间的直线距离

-- =============================================

alter FUNCTION GetDistance 

(

@d_x1 float,

@d_y1 float,

    @d_x2 float,

    @d_y2 float

)

RETURNS float

AS

BEGIN

declare @mDistance float,@Lon1 float,@Lon2 float,@Lat1 float,@Lat2 float,@LonDist float,@LatDist float

    declare @A float ,@C float ,@D float ,@E float ,@U float

    set @mDistance = 0

    set @Lon1 = @d_x1 * pi() / 180.0

    set @Lon2 = @d_x2 * pi() / 180.0

    set @Lat1 = @d_y1 * pi() / 180.0

    set @Lat2 = @d_y2 * pi() / 180.0


    -- 计算经差与纬差

    set @LonDist = @Lon1 - @Lon2

    set @LatDist = @Lat1 - @Lat2


    -- 以FEET为单位,计算两点之间的距离

    set @A = sin( @LatDist / 2.0 ) * sin( @LatDist / 2.0) + cos(@Lat1) * cos( @Lat2 ) * sin(@LonDist /2.0)*sin(@LonDist /2.0)

    if sqrt(@A) > 1 

    begin

      set @E = 1.0

    end

    else

      set @E = sqrt(@A)


    set @C = 2 * atan(@E/sqrt(1-(@E*@E)));

    set @D = (3963 - 13 * sin((@Lat1 + @Lat2) / 2)) * @C

    set @mDistance = @D * 5280  -- 距离单位为FEET


    --将单位FEET转换为公里

    set @mDistance = @mDistance * (3048.0/10000000.0)

    set @U = 10.0*10.0*10.0 

    set @mDistance = ceiling(@mDistance*@U+(5.0/10.0))/@U 

    -- 返回的结果,距离单位是公里

    Return (@mDistance) 

END

GO 

 

 

 

 

 

你可能感兴趣的:(原创)