SQL server berechnen Distanzen zwischen 2 Sätzen von Spalten von Breiten- / Längengrad

Ich versuche, die nächstgelegene Wetterstation zu einer bestimmten Postleitzahl zu berechnen. Ich habe data mit der lat / lon für die Wetterstation und die Postleitzahlen. Ich habe auch einen path, um Abstand für eine 2 Punkte ( hier ) zu berechnen. Was ich suche ist eine Möglichkeit, eine Spalte zu erstellen, die die Distanzen für mehrere Instanzen hat.

StationNum lat lon Zip lat lon distance 123 34.66 98.32 12345 33.78 91.91 ??? 456 33.03 96.8 23456 35.23 92.23 ??? 789 32.29 96.85 34567 33.09 92.68 ??? 

Gibt es einen path, das zu tun oder muss ich die Mathe von Hand schreiben?

    Mit dem GEOGRAPHY-Typ

    Sie hatten doppelte Feldnamen, also habe ich sie zu Lat1 / Lon1 und Lat2 / Lon2 umbenannt. Wenn dies ein Join ist, füge den Alias ​​a.lat/a.lon b.lat/b.lon hinzu.

    Beispiel

     Declare @YourTable Table ([StationNum] varchar(50),[lat1] float,[lon1] float,[Zip] varchar(50),[lat2] float,[lon2] float) Insert Into @YourTable Values (123,34.66,98.32,12345,33.78,91.91) ,(456,33.03,96.8,23456,35.23,92.23) ,(789,32.29,96.85,34567,33.09,92.68) Select * ,InMeters = GEOGRAPHY::Point([Lat1], [Lon1], 4326).STDistance(GEOGRAPHY::Point([Lat2], [Lon2], 4326)) ,InMiles = GEOGRAPHY::Point([Lat1], [Lon1], 4326).STDistance(GEOGRAPHY::Point([Lat2], [Lon2], 4326)) / 1609.344 from @YourTable 

    Kehrt zurück

    Bildbeschreibung hier eingeben

    Bearbeiten – Für Ihre Betrachtung

    Betrachten Sie das Hinzufügen eines Geographie-Feldes zu Ihrer Quellentabelle (n). Dadurch werden die redundanten GEOGRAPHY::Point() functionsaufrufe beseitigt

     Update YourTable Set GeoPoint = GEOGRAPHY::Point([Lat], [Lon], 4326) 

    Also dann wäre die Berechnung für Distanz einfach

      ,InMeters = A.GeoPoint.STDistance(B.GeoPoint) ,InMiles = A.GeoPoint.STDistance(B.GeoPoint) / 1609.344