Winkel von zwei Punkten(GPS Position)



  • Hallo,

    ich habe zwei Punkte als GPS Position als Longitude/Latitude. Wenn man sich den ersten Punkt als Referenzpunkt (bzw. Mittelpunkt vom Ziffernblatt) vorstellt, soll der Winkel zum zweiten Punkt berechnet werden (12Uhr darf gerne der Norden sein).

    Ich habe bereits etliche Formeln ausprobiert,

    double a = atan2(sin(p2->getLongitude() - p1->getLongitude()) * cos(p2->getLatitude()), cos(p1->getLatitude()) * sin(p2->getLatitude()) - sin(p1->getLatitude()) * cos(p2->getLatitude() * cos(p2->getLongitude() - p1->getLongitude()))) * 180 / 3.14159265358979323846D;
    

    aber mal grob überprüft, es stimmt nicht 100% überein. Beispielsweise hätte ich bei einigen Beispielskoordinaten mit googlemaps ca. +/- 120° erwartet, bekam aber 180° usw.

    Hat jemand eine Formal in Petto, womit er bis jetzt ganz gut gefahren ist.
    Ich danke schonmal, und VG
    Lespaul



  • Vielleicht hilft dir diese Seite weiter. Ist zwar Luftfahrt, aber die Formeln dürften gleich sein.
    http://williams.best.vwh.net/avform.htm



  • Sillo schrieb:

    Vielleicht hilft dir diese Seite ...

    Ich habe es eben ausprobiert, ich habe komischer weise ähnliche Ergebnisse wie davor.

    Im Artikel habe ich gesehen, dass der Autor lon/lat Kooridnaten :

    Suppose point 1 is LAX: (33deg 57min N, 118deg 24min W)

    dann gleich umrechnet mittels (zB LAX):

    lat1=(33+57/60)*pi/180=0.592539
    lon1=(118+24/60)*pi/180=2.066470

    Ich bekomme gleich folgende Koordinaten durchgereicht:
    33.942751
    -118.405833
    (Die Gradzahl vor dem Komma stimmt ja)

    Ich benutzte doch WGS84? Oder wie sind diese einzelnen Beziechner für die oben erwähnten lon/lat Schreibweisen?
    Wie rechne ich dann meine Koordinaten so um, dass ich die Formel benutzen kann?



  • mit folgender Methode klappt es bei mir soweit ganz gut mit Dezimalgrad-Koordinaten:

    double getAngle(WGS84 p1, WGS84 p2) // WGS84 als Dezimalgrad
    {
      const double PI = 3.14159265D;
    
      double d_lon = (p2->longitude() - p1->longitude()) * PI / 180;
      double lat_1_RAD = p1->latitude() * PI / 180;
      double lat_2_RAD = p2->latitude() * PI / 180;
    
      double y = sin(d_lon) * cos(lat_2_RAD);
      double x = cos(lat_1_RAD) * sin(lat_2_RAD) - sin(lat_1_RAD) * cos(lat_2_RAD) * cos(d_lon);
    
      double bunch;
      double frctn = modf((atan2(y, x) * 180 / PI), &bunch);
      return ((int(bunch + 360) % 360) + frctn);
    }
    


  • Probiere doch mal bitte folgendes:
    1.) Rechne die beiden ellipsoiden Koordinaten (Längengrad, Breitengrad, Höhe) in geozentrische Koordinaten P1, P2 um. Referenzellipsoid dürfte WGS84 sein.
    2.) Fasse die beiden geozentrischen Koordinaten P1, P2 als Vektoren (Nullpunkt ist Erdmittelpunkt) V1, V2 auf.
    3.) Berechne den Winkel zwischen den Vektoren V1, V2 mittels alpha = acos(V1 * V2/(|V1|*|V2|)

    Die Formeln zur Umrechnung ellipsoidische Koordinaten in geozentrische Koordinaten kannst du hier entnehmen:
    http://forum.diegeodaeten.de/index.php?id=1626


Log in to reply