Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Calculando a distância entre dois pontos (Latitude, Longitude)


Como você está usando o SQL Server 2008, você tem a geography tipo de dados disponível, projetado exatamente para esse tipo de dados:
DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'

SELECT @source.STDistance(@target)


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

(1 row(s) affected)

Dizendo-nos que são cerca de 538 km de (perto) de Londres a (perto) de Edimburgo.

Naturalmente, haverá muito a aprender primeiro, mas uma vez que você sabe disso, é muito mais fácil do que implementar seu próprio cálculo de Haversine; além disso, você obtém MUITAS funcionalidades.

Se você quiser manter sua estrutura de dados existente, ainda poderá usar STDistance , construindo uma geography adequada instâncias usando o 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