Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Calcul de la distance entre deux points (Latitude, Longitude)

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