Dans le but de garantir des calculs de distance précis entre deux géocoordonnées, un développeur a rencontré un écart entre ses propres résultats et ceux fournies par des applications externes. Alors que leur implémentation C# actuelle renvoie une distance moyenne de 3,3 miles, d'autres plates-formes signalent des distances plus proches de 3,5 miles. Cette disparité importante a incité à enquêter sur des erreurs potentielles ou des méthodes alternatives de calcul de distance.
La mise en œuvre actuelle du développeur s'articule autour de la formule suivante :
public static double Calculate(double sLatitude, double sLongitude, double eLatitude, double eLongitude) { var radiansOverDegrees = (Math.PI / 180.0); var sLatitudeRadians = sLatitude * radiansOverDegrees; var sLongitudeRadians = sLongitude * radiansOverDegrees; var eLatitudeRadians = eLatitude * radiansOverDegrees; var eLongitudeRadians = eLongitude * radiansOverDegrees; var dLongitude = eLongitudeRadians - sLongitudeRadians; var dLatitude = eLatitudeRadians - sLatitudeRadians; var result1 = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + Math.Cos(sLatitudeRadians) * Math.Cos(eLatitudeRadians) * Math.Pow(Math.Sin(dLongitude / 2.0), 2.0); // Using 3956 as the number of miles around the earth var result2 = 3956.0 * 2.0 * Math.Atan2(Math.Sqrt(result1), Math.Sqrt(1.0 - result1)); return result2; }
Le développeur a émis l'hypothèse que l'écart pourrait être attribué aux variations dans les conversions d'unités (calcul en kilomètres puis conversion en miles). Cependant, après un examen plus approfondi, il a été déterminé que la solution optimale réside dans l'utilisation de la classe GeoCoordonnée introduite dans .NET Framework 4 et versions ultérieures. Cette classe fournit une méthode intégrée appelée GetDistanceTo, qui simplifie les calculs de distance entre les coordonnées géographiques.
Le code suivant montre comment exploiter GetDistanceTo :
var sCoord = new GeoCoordinate(sLatitude, sLongitude); var eCoord = new GeoCoordinate(eLatitude, eLongitude); return sCoord.GetDistanceTo(eCoord);
Cette méthode renvoie la distance en mètres. Pour obtenir la distance en miles, vous pouvez diviser le résultat par 1609,344. Le référencement de l'espace de noms System.Device est une condition préalable à l'utilisation de la classe GeoCoordonnée.
En adoptant cette approche, les développeurs peuvent accéder à une méthode éprouvée et fiable pour calculer les distances entre les coordonnées géographiques, éliminant ainsi le risque d'erreurs ou d'inexactitudes.
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!