经常要根据两个经纬度值,求它们之间的距离。
delphi实现代码:
另一种实现方式:
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