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