Puisque vous utilisez SQL Server 2008, vous avez la geography
type de données disponible, qui est conçu exactement pour ce type de données :
DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'
SELECT @source.STDistance(@target)
Donne
----------------------
538404.100197555
(1 row(s) affected)
En nous disant qu'il y a environ 538 km de (près de) Londres à (près de) Édimbourg.
Naturellement, il y aura une quantité d'apprentissage à faire en premier, mais une fois que vous le savez, c'est beaucoup plus facile que d'implémenter votre propre calcul Haversine; en plus, vous obtenez BEAUCOUP de fonctionnalités.
Si vous souhaitez conserver votre structure de données existante, vous pouvez toujours utiliser STDistance
, en construisant une geography
appropriée instances utilisant le Point
méthode :
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