How to calculate distance between multiple points in SQL Server?

前端 未结 2 1784
暗喜
暗喜 2020-12-31 12:33

I have table with data from GPS, e.g.: Latitude, Longitude, Time, UserId

How to aggregate total distance in speci

2条回答
  •  别那么骄傲
    2020-12-31 13:14

    The below function gives distance between two geocoordinates in miles

    create function [dbo].[fnCalcDistanceMiles] (@Lat1 decimal(8,4), @Long1 decimal(8,4), @Lat2 decimal(8,4), @Long2 decimal(8,4))
    returns decimal (8,4) as
    begin
    declare @d decimal(28,10)
    -- Convert to radians
    set @Lat1 = @Lat1 / 57.2958
    set @Long1 = @Long1 / 57.2958
    set @Lat2 = @Lat2 / 57.2958
    set @Long2 = @Long2 / 57.2958
    -- Calc distance
    set @d = (Sin(@Lat1) * Sin(@Lat2)) + (Cos(@Lat1) * Cos(@Lat2) * Cos(@Long2 - @Long1))
    -- Convert to miles
    if @d <> 0
    begin
    set @d = 3958.75 * Atan(Sqrt(1 - power(@d, 2)) / @d);
    end
    return @d
    end 
    

    The below function gives distance between two geocoordinates in kilometres

    CREATE FUNCTION dbo.fnCalcDistanceKM(@lat1 FLOAT, @lat2 FLOAT, @lon1 FLOAT, @lon2 FLOAT)
    RETURNS FLOAT 
    AS
    BEGIN
    
        RETURN ACOS(SIN(PI()*@lat1/180.0)*SIN(PI()*@lat2/180.0)+COS(PI()*@lat1/180.0)*COS(PI()*@lat2/180.0)*COS(PI()*@lon2/180.0-PI()*@lon1/180.0))*6371
    END
    

    Usage:

    select [dbo].[fnCalcDistanceKM](13.077085,80.262675,13.065701,80.258916)
    

    The below function gives distance between two geocoordinates in kilometres using Geography data type which was introduced in sql server 2008

    DECLARE @g geography;
    DECLARE @h geography;
    SET @g = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326);
    SET @h = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
    SELECT @g.STDistance(@h);
    

    Reference: Ref1,Ref2

    I hope this helps

提交回复
热议问题