Halbes C++-Problem: Längengrad von Minuten in Grad umwandeln



  • Hallo!

    Ich habe hier Längengradwerte die in Minuten vorliegen und wie folgt umzuwandeln sind, um Grad zu erhalten:

    longitude = longitude / 10000.0 / 60.0
    

    Die 10000 sind durch die Speicherung bedingt, die 60 damit man auf Grad kommt.

    So, wenn ich das jetzt richtig verstanden habe, dann werden südliche und westliche Breitengrade in negativen ° angegeben (Siehe rechtes Bild: http://www.bocholt.de/intabox/medienarchive/serviceangebote/erdkugel_mit_koordinaten.gif)

    Beispiel:

    long longitude = 194398226;
    double longitudeDeg = static_cast<double>(longitude) / 10000.0 / 60.0 = 323.997°
    

    Korrekt soll aber sein: -123.395°

    Wie kommt man auf diesen Wert? Wären das nicht

    (360-323.997) * -1 ~=  -36°
    

    😕 Wenn mir das jemand erklären kann, dann erübrigt sich ggfs. schon die nächste (C++-Frage). Solange bitte noch nicht verschieben 👍


  • Mod

    edit: Nix



  • Ich versteh es noch nicht ganz... ich hänge mal den C++-Part dran, der ein korrektes Ergebnis liefert:

    long convertLongitude( long raw_longitude )
    	{
    		long longitude;
    
    	    /* Convert longitude to signed number */
    	    if( raw_longitude >= 0x8000000 )
    	    {
    	        longitude = 0x10000000 - raw_longitude;
    	        longitude *= -1;
    	    } else {
    	    	longitude = raw_longitude;
    	    }
    
    		return longitude;
    	}
    
    // ...
    long longitude = 194398226;
    double longitudeDeg = convertLongitude( longitude )/10000.0 / 60.0; // -123.395°
    

    Wieso wird da geprüft, ob der Längengrad >= 0x8000000 (=134217728dez) ist? Ich würde da irgendwie einen Wert mit 180° erwarten, also sowas wie

    180 * 10000 * 60 = 108000000dec = 0x66FF300
    

    Ich glaube ich stelle mich gerade blöde an 😕 😞



  • Ehrlich gesagt kenne ich eine solche Schreibweise von Längengrad nicht. Wie ist denn 194398226 zu interpretieren? Ist das westl. oder östl. Länge? Wo sind die Minuten und Sekunden?



  • [Rewind] schrieb:

    Ehrlich gesagt kenne ich eine solche Schreibweise von Längengrad nicht. Wie ist denn 194398226 zu interpretieren? Ist das westl. oder östl. Länge? Wo sind die Minuten und Sekunden?

    Das ist ein Wert ausschließlich in Min*10000 (ich hoffe ich vertu mich da jetzt nicht, das wird intern leider so gespeichert). Daher die 10000 bzw. ➡ (194398226 / 10000.0)



  • Von wem ist denn die Funktion? Ich kenne nicht den Algorithmus, der die Gradzahl in Minuten liefert, aber es sieht stark danach aus als würde er anfangen, die Minuten bei -180° (also 180° westl. Länge) zu zählen. Demzufolge müsstest du noch 10800 Minuten bis zum Nullmeridian (bzw. 10800*10000 in diesem Fall) von raw_longitude abziehen. Dann komme ich aber auf -143.997°... Ich kann es mir nicht anders erklären.



  • Ich nehme mal an, die Funktion convertLongitude ist korrekt.

    Dann wird in dem Parameter raw_longitude die geographische Länge in zwei Intervalle abgebildet.

    Die Werte [0 bis 108000000) stehen für 0°, <180°. Wobei 108000000 := 0x66FF300 < 0x8000000 ist
    und die Werte [268435456 bis 160435456] bzw. [0x10000000 bis 0x9900D00] stehen für die Längen von [-0° bis -180°].

    Wahrscheinlich meinte jemand in der Variablen raw_longitude keine negativen Werte übertragen zu können und hat dann einfach 0x10000000 hinzu addiert.

    Gruß
    Werner



  • Eure Beiträge helfen mir weiter, ich glaube durch euch (besonders auch Werner) bin ich jetzt auf dem richtigen Weg


Anmelden zum Antworten