sql >> Database teknologi >  >> RDS >> Sqlserver

Beregning af afstand mellem to punkter (breddegrad, længdegrad)

Da du bruger SQL Server 2008, har du geography tilgængelig datatype, som er designet til netop denne type data:

DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'

SELECT @source.STDistance(@target)

Giver

----------------------
538404.100197555

(1 row(s) affected)

Fortæller os, at det er omkring 538 km fra (nær) London til (nær) Edinburgh.

Naturligvis vil der være en del læring at gøre først, men når du først ved det, er det langt langt nemmere end at implementere din egen Haversine-beregning; plus du får MEGET funktionalitet.

Hvis du vil beholde din eksisterende datastruktur, kan du stadig bruge STDistance , ved at konstruere passende geography forekomster ved hjælp af Point metode:

DECLARE @orig_lat DECIMAL(12, 9)
DECLARE @orig_lng DECIMAL(12, 9)
SET @orig_lat=53.381538 set @orig_lng=-1.463526

DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);

SELECT *,
    @orig.STDistance(geography::Point(dest.Latitude, dest.Longitude, 4326)) 
       AS distance
--INTO #includeDistances
FROM #orig dest


  1. SQL Server Error 4104:Multi-part identifikatoren kunne ikke bindes.

  2. Har din virksomhed brug for en HR-database?

  3. Hvordan Power()-funktionen virker i PostgreSQL

  4. Find overtrædelser af fremmednøgler i SQLite