--calculate the distance between two points by latitude Create FUNCTION [dbo].[fngetdistancenew] --latbegin Start Longitude --lngbegin Start Dimension --29.490295,106.486654,29.615467, 106.581515 (@LatBegin1 varchar( -),@LngBegin1 varchar( -),@location varchar( -)) Returns Real asBEGIN --Convert the Location field to prevent the field from being too long. Affect SQL Aesthetics Declare @LatBegin REAL Declare @LngBegin REAL Declare @LatEnd REAL Declare @LngEnd REAL Set @LatBegin=Convert(Real,@LatBegin1) Set @LngBegin=Convert(Real,@LngBegin1) Set @LatEnd=Convert(Real,SUBSTRING(@location,0,charindex('&',@location))) Set @LngEnd=Convert(Real,SUBSTRING(@location,charindex('&',@location)+1,LEN(@location))) --distance (km) DECLARE @Distance REAL DECLARE @EARTH_RADIUS REAL SET @EARTH_RADIUS = 6371.004 DECLARE @RadLatBegin REAL, @RadLatEnd REAL, @RadLatDiff REAL, @RadLngDiff REAL SET @RadLatBegin = @LatBegin *PI()/ 180.0 SET @RadLatEnd = @LatEnd *PI()/ 180.0 SET @RadLatDiff = @RadLatBegin - @RadLatEnd SET @RadLngDiff = @LngBegin *PI()/ 180.0 - @LngEnd *PI()/ 180.0 SET @Distance = 2 *ASIN( SQRT( POWER(SIN(@RadLatDiff / 2),2)+COS(@RadLatBegin)*COS(@RadLatEnd) *POWER(SIN(@RadLngDiff / 2),2) ) ) SET @Distance = @Distance * @EARTH_RADIUS SET @Distance = Round((@Distance * 10000)/ 10000,5) RETURN @Distance END
SQL Server2008 calculates the distance between two points based on latitude and longitude