sql >> Base de Datos >  >> RDS >> Sqlserver

Cálculo de la distancia entre dos puntos (Latitud, Longitud)

Dado que está utilizando SQL Server 2008, tiene la geography tipo de datos disponible, que está diseñado exactamente para este tipo de datos:

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

SELECT @source.STDistance(@target)

Da

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

(1 row(s) affected)

Diciéndonos que hay unos 538 km desde (cerca) de Londres hasta (cerca) de Edimburgo.

Naturalmente, habrá una cantidad de aprendizaje que hacer primero, pero una vez que lo sepa, es mucho más fácil que implementar su propio cálculo de Haversine; además obtienes MUCHA funcionalidad.

Si desea conservar su estructura de datos existente, aún puede usar STDistance , mediante la construcción de una geography adecuada instancias usando el Point método:

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