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

Calcolo della distanza tra due punti (latitudine, longitudine)

Poiché stai utilizzando SQL Server 2008, hai la geography tipo di dati disponibile, progettato esattamente per questo tipo di dati:

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

SELECT @source.STDistance(@target)

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

(1 row(s) affected)

Dicendoci che sono circa 538 km da (vicino) Londra a (vicino) Edimburgo.

Naturalmente ci sarà una certa quantità di apprendimento da fare prima, ma una volta che lo sai è molto più facile che implementare il tuo calcolo Haversine; in più ottieni MOLTE funzionalità.

Se desideri conservare la struttura dati esistente, puoi comunque utilizzare STDistance , costruendo una geography adatta istanze utilizzando il Point metodo:

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