Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Entfernung zwischen zwei Punkten berechnen (Breitengrad, Längengrad)

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