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