Maison >base de données >tutoriel mysql >Comment puis-je calculer avec précision la distance entre deux points de latitude/longitude dans SQL Server ?

Comment puis-je calculer avec précision la distance entre deux points de latitude/longitude dans SQL Server ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-12 13:16:42354parcourir

How Can I Accurately Calculate the Distance Between Two Latitude/Longitude Points in SQL Server?

Calcul précis de la distance entre deux points géographiques dans SQL Server

SQL Server nécessite souvent de calculer les distances entre les coordonnées de latitude et de longitude. Bien que la formule Haversine soit courante, ses limites en matière de précision nécessitent une solution plus robuste.

Exploiter le geography Type de données

SQL Server 2008 et versions ultérieures offrent le type de données geography, idéal pour une gestion efficace et précise des données spatiales, y compris les calculs de distance. Le code suivant démontre son utilisation :

<code class="language-sql">DECLARE @source geography = 'POINT(0 51.5)';
DECLARE @target geography = 'POINT(-3 56)';

SELECT @source.STDistance(@target);</code>

Cela renvoie la distance (en kilomètres) entre les deux points. Par exemple, ce qui précède retournera environ 538 km. Les méthodes spatiales étendues du type geography en font l'approche recommandée pour les données géographiques dans SQL Server.

Intégration avec les structures de données existantes

Maintenir votre structure de données actuelle est possible tout en bénéficiant de la méthode STDistance. Convertissez vos valeurs de latitude et de longitude en geography instances :

<code class="language-sql">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
FROM #orig dest;</code>

Cette approche garantit des calculs de distance précis sans restructuration majeure des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn