NMEA GSV Daten umrechnen -> SkyView

  • Moin !


    Zitat

    Wie aus Bahnelementen und deiner bekannten Position der Himmel über dir errechnet wird, findest du im Internet


    Also ich habe gestern Abend na ganze Weil gesucht, aber leider ohne Erfolg. Ich weiss auch nicht, was ich genau suchen muss.


    Hast du vielleicht ein paar weiterführende Links?

  • Hallo,


    Zitat

    Original von moelski
    Also ich habe gestern Abend na ganze Weil gesucht, aber leider ohne Erfolg. Ich weiss auch nicht, was ich genau suchen muss.


    Warum guckst du nicht ins Mahematikbuch unter Winkelfunktionen, Definition am rechtwinkligen Dreieck oder Kreis? Warum nimmst du nicht mal ein Blatt Papier, Bleistift, Lineal und Zirkel? Die "SkyView"-Ansicht ist doch nun wirklich nicht weiter tragisch...



    Was wissen wir denn?


    Wir haben im Logfile GSV-Sätze als reinen Text vorliegen. Wie man diese Werte aus den Zeilen holt, erspare ich mir jetzt.


    Weiterhin wissen wir, daß unser (Zeichen)Window eine bestimmte Größe hat und das sich der Koordinatenursprung (der Punkt 0,0) in der linken obereren Ecke befindet. Nehmen wir also an, unser Window ist 200 Pixel breit und auch 200 Pixel hoch. Der "Zenit" unseres Himmelsgewölbes befindet sich normalerweise in der Mitte des Windows, also jetzt im Punkt 100,100. Der Einfachheit halber sagen wir, daß der Radius des Himmels 90 Pixel groß sein soll.


    int xOffset = 100;
    int yOffset = 100;
    int rSky = 90;


    Im Prinzip können wir jetzt also die Kreise der Höhen des Himmels in das Window malen. Nun müssen die Sats rein.



    Als nächstes fällt auf, daß die Länge der gedachten Gerade vom Kreismittelpunkt zum Sat von seiner Höhe abhängt. Das ist eine lineare Funktion. Bei einer Höhe von 0° ist die Länge rSat = rSky, bei einer Höhe von 90° ist rSat =0.


    Wir können also sagen, der Sat befindet sich auf jeden Fall in einer Entfernung von


    rSat = (-Elevation / 90° + 1) * rSky


    Pixel vom Kreismittelpunkt (Zenit). Wo genau, müssen wir noch berechnen. Optimiert, um Divisionen zu vermeiden, würde ich im Programm am Anfang schreiben:


    double K1_90 = -1/90.0; // globale Konstante


    und später einfach


    rSat = (Elevation * K1_90 + 1) * rSky


    verwenden.



    Als Beispiel nehme ich jetzt Sat 6, der im obigen Bild bei einer Höhe von 8° steht:


    rSat = (8 * K1_90 + 1) * 90
    rSat = 82


    Diese 82 ist also der Radius eines neuen Kreises in Pixel. Und nun rechnen wir damit und mit dem gegebenen Azimut (58°) die Koordinaten x und y des Sats in unserem Window aus. x und y können eigentlich nur der Sinus- bzw. Kosinusfunktion gehorchen. Das sieht in Formeln gegossen so aus:


    x = xOffset + sin(Azimut) * rSat;
    y = yOffset - cos(Azimut) * rSat;


    Wenn man die sin() und cos()-Werte für 0, 90, 180 und 270 mit Vorzeichen einsetzt, sieht man, daß die Richtungen im (Zeichen)Window stimmen (Norden ist oben, etc.)


    Den "Punkt" für Sat 6 können wir also bei


    x = 100 + sin(58°) * 82
    y = 100 - cos(58°) * 82


    x = 169 und y = 56 in unser Window setzen.


    Was ist nun so schwer daran gewesen?


    bfn hevo2

  • Zitat

    Original von moelski
    Moin !


    Ich habe die Sache mitlerweile im Griff. Wer mag kann sich das Ergebnis mal hier ansehen. Die NMEA Daten werden in 3D visualisiert inkl. Kartenkalibrierung / -einbindung.


    http://www.logview.info/phpBB2/viewtopic.php?t=344


    Hallo,


    würde ich gerne mal näher testen. Kannst Du Dein(e) Programm(e) auch mal hier einstellen, evtl mit einer kurzen Anwendungsbeschreibung?

  • Hallo,


    Glg: Freut mich, daß dir meine kleine "Abhandlung" irgendwie weitergeholfen hat. ;)


    th.becker: Das Programm sieht echt gut aus! (Ich habe es zwar noch nicht ausprobiert, aber von den Bildern her... Das Auge ißt ja schließlich mit.)


    bfn hevo2

  • Moin !


    Ich kann bald die neue Version hier Online stellen. Die hat zahlreiche Verbesserung beim Kartenhandling. Dauert aber noch etwas. So 4-7 Tage oder so. Je nachdem wie schnell ich fertig werde.