Da Sie SQL Server 2008 verwenden, haben Sie die geography
Datentyp zur Verfügung, der genau für diese Art von Daten ausgelegt ist:
DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'
SELECT @source.STDistance(@target)
Gibt
----------------------
538404.100197555
(1 row(s) affected)
Sagen wir uns, es sind etwa 538 km von (nahe) London nach (nahe) Edinburgh.
Natürlich müssen Sie zuerst eine Menge lernen, aber sobald Sie es wissen, ist es viel einfacher, als Ihre eigene Haversine-Berechnung zu implementieren. Außerdem erhalten Sie eine Menge Funktionalität.
Wenn Sie Ihre vorhandene Datenstruktur beibehalten möchten, können Sie trotzdem STDistance
verwenden , indem Sie eine geeignete geography
konstruieren Instanzen mit dem Point
Methode:
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