Heim > Backend-Entwicklung > C++ > Warum ist meine GeoCoordinate-Entfernungsberechnung ungenau und wie kann ich sie mit .NETs „GeoCoordinate.GetDistanceTo()' verbessern?

Warum ist meine GeoCoordinate-Entfernungsberechnung ungenau und wie kann ich sie mit .NETs „GeoCoordinate.GetDistanceTo()' verbessern?

Mary-Kate Olsen
Freigeben: 2025-01-04 14:05:38
Original
267 Leute haben es durchsucht

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

Bestimmen des optimalen Ansatzes für die Geokoordinaten-Entfernungsberechnung

Bei dem Versuch, genaue Entfernungsberechnungen zwischen zwei Geokoordinaten zu ermitteln, ist ein Entwickler auf eine Diskrepanz zwischen seinen eigenen und diesen Ergebnissen gestoßen bereitgestellt durch externe Anwendungen. Während ihre aktuelle C#-Implementierung eine durchschnittliche Entfernung von 3,3 Meilen zurückgibt, melden andere Plattformen Entfernungen, die eher bei 3,5 Meilen liegen. Diese erhebliche Diskrepanz hat zu einer Untersuchung potenzieller Fehler oder alternativer Entfernungsberechnungsmethoden geführt.

Die aktuelle Implementierung des Entwicklers basiert auf der folgenden Formel:

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;
}
Nach dem Login kopieren

Der Entwickler hat die Hypothese aufgestellt, dass die Diskrepanz vorliegen könnte Dies ist auf Schwankungen bei der Einheitenumrechnung zurückzuführen (Berechnung in Kilometern und anschließende Umrechnung in Meilen). Bei weiterer Untersuchung wurde jedoch festgestellt, dass die optimale Lösung in der Verwendung der GeoCoordinate-Klasse liegt, die in .NET Framework 4 und höher eingeführt wurde. Diese Klasse stellt eine integrierte Methode namens GetDistanceTo bereit, die Entfernungsberechnungen zwischen GeoKoordinaten vereinfacht.

Der folgende Code zeigt, wie GetDistanceTo genutzt wird:

var sCoord = new GeoCoordinate(sLatitude, sLongitude);
var eCoord = new GeoCoordinate(eLatitude, eLongitude);

return sCoord.GetDistanceTo(eCoord);
Nach dem Login kopieren

Diese Methode gibt die Entfernung in Metern zurück. Um die Entfernung in Meilen zu erhalten, können Sie das Ergebnis durch 1609,344 dividieren. Die Referenzierung des System.Device-Namespace ist eine Voraussetzung für die Verwendung der GeoCoordinate-Klasse.

Durch die Übernahme dieses Ansatzes können Entwickler auf eine bewährte und zuverlässige Methode zur Berechnung von Abständen zwischen GeoCoordinates zugreifen und so die Möglichkeit von Fehlern oder Ungenauigkeiten ausschließen.

Das obige ist der detaillierte Inhalt vonWarum ist meine GeoCoordinate-Entfernungsberechnung ungenau und wie kann ich sie mit .NETs „GeoCoordinate.GetDistanceTo()' verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage