Maison > développement back-end > C++ > Pourquoi mon calcul de distance GeoCoordonnée est-il inexact et comment puis-je l'améliorer à l'aide de « GeoCoordonnée.GetDistanceTo() de .NET ?

Pourquoi mon calcul de distance GeoCoordonnée est-il inexact et comment puis-je l'améliorer à l'aide de « GeoCoordonnée.GetDistanceTo() de .NET ?

Mary-Kate Olsen
Libérer: 2025-01-04 14:05:38
original
231 Les gens l'ont consulté

Why is my GeoCoordinate distance calculation inaccurate, and how can I improve it using .NET's `GeoCoordinate.GetDistanceTo()`?

Détermination de l'approche optimale pour le calcul de la distance des géocoordonnées

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;
}
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal