Peilung zwischen zwei CLLocationCoordinate2Ds berechnen

Sehr "einfaches" Problem: Bei zwei CLLocationCoordinate2Ds, wie kann ich die Peilung (als Bogenmaß) von der ersten zur zweiten bekommen? Ich habe viel recherchiert und mich damit befasst, sowohl mit dem allgemeinen Problem als auch speziell mit Objective-C / Cocoa Touch / iOS.

Hier ist meine Implementierung:

- (float) getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc
{
    float fLat = fromLoc.latitude;
    float fLng = fromLoc.longitude;
    float tLat = toLoc.latitude;
    float tLng = toLoc.longitude;

    return atan2(sin(fLng-tLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(fLng-tLng));         
}

Diese Methode liefert jedoch keine konsistenten Ergebnisse für mich. Befindet sich die Peilung in der Nähe von Norden oder Süden, scheint dies in Ordnung zu sein. In jeder anderen Richtung werden jedoch inkonsistente Daten zurückgegeben. Beispiel:

Von 50.405018, 8.437500

To 51.339802, 12.403340

Meine Methode gibt Folgendes zurück: 5.918441 Radianten

Sollte 1.18660576 Radianten sein

(sehenhttp: //www.movable-type.co.uk/scripts/latlong.htm undhttp: //www.movable-type.co.uk/scripts/latlong-map.html? lat1 = 50.405018 & long1 = 8.437500 & lat2 = 51.339802 & long2 = 12.403340)

Ich habe doppelt und dreifach überprüft, ob die Formel korrekt ist. Ich habe auch eine Reihe von Werten wie im obigen Beispiel vor Ort überprüft, einige richtig, andere falsch. Ich habe mit verschiedenen Modulos oder Begrenzungen des Rückgabewerts rumgespielt, auch kein Glück.

Irgendwelche Ideen? Gibt es ein Problem mit meinem Code? Vielleicht habe ich etwas über die Funktionsweise von mathematischen Funktionen falsch verstanden?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage