Protože používáte SQL Server 2008, máte geography
dostupný datový typ, který je určen přesně pro tento druh dat:
DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'
SELECT @source.STDistance(@target)
Dává
----------------------
538404.100197555
(1 row(s) affected)
Řekněme, že je to asi 538 km z (nedaleko) Londýna do (nedaleko) Edinburghu.
Přirozeně je potřeba se nejprve hodně naučit, ale jakmile to budete vědět, je to mnohem jednodušší než implementovat vlastní výpočet Haversine; navíc získáte HODNĚ funkcí.
Pokud chcete zachovat stávající strukturu dat, můžete stále použít STDistance
, vytvořením vhodné geography
instance pomocí Point
metoda:
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