INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Umrechnung float Geodaten in Grad'Min'Sec.secfrac
04.10.2015, 11:42 (Dieser Beitrag wurde zuletzt bearbeitet: 04.10.2015 21:17 von HaWe.)
Beitrag #1
Umrechnung float Geodaten in Grad'Min'Sec.secfrac
hallo,
ich verwzeifle langsam:
ich versuche eine Umrechnung
float Geodaten
in Grad'Min'Sec.secfrac

bei positiven Gradzahlen funktioniert es:
Code:
static   double  fmin, fdecsec,  fLattmean, fLongmean,;
  uint16_t decdeg, decmin;

    fLongmean = (double)gps.location.lng();
    decdeg = (int16_t)fLongmean;                        // 1 byte latt degrees
    fmin   = ( fLongmean - (double)decdeg ) * 60;
    decmin = (int16_t)(fmin);                           // 1 byte latt degrees
    fdecsec= ( fmin - (double)decmin ) * 60 ;

    sprintf(sbuf, " %+04d:%02d'%7.4f ", decdeg, decmin, fdecsec);
    Serial.print(sbuf);

+040.8625980
wird zu
+040:51'45.3543
das stimmt!

bewege ich mich aber virtuell nach Westen über den Nullmeridian hin zu negativen Geo-Graden, kommt nur Mist raus!

-001.2512264
wird zu
-001:-15'-239861760.0000

was mache ich falsch?
gibt es eine bessere Umrechnung ig von
float-Grad
in Grad.Min.Sek.(4Nachkommeastellen) ?


ps,
edit, wurde vereinfacht, da teilw. hier nicht relevant

habs selber gelöst:

Code:
//
    fminf   = abs( 60*modf(fLongmean, &fdegi) );   // split: deg.xxxxx => fdeg + fminf(min.xxxxx  )
    intdeg  =                (int16_t)(fdegi);     // fdeg => degrees integer
                                                   // rest = fminf == min.xxxxx as float

    fsecf   = 60*modf(fminf , &fmini);             // split: min.xxxxx => fmin  + fsecf(sec.xxxx )
    intmin  =        (int16_t)(fmini);             // fmin => minutes integer
                                                   // rest = fsecf == sec.xxxx as float
                                                  
    fsecfrac=    modf(fsecf , &fseci);             // split: sec.xxxx => fsec  + fsecfrac(0.xxxx )
    intsec  =        (int16_t)(fseci);             // fsec => seconds integer
                                                   // rest = seconds fraction as 0.xxxx
klappt, probeweise dieselbe Zahl einmal pos. + 1x negativ haben jetzt identische min, sec.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Rechnen mit float und unsigned long Rudi 3 300 03.06.2016 12:41
Letzter Beitrag: hotsystems
  float in eeprom goldfisch 4 667 28.12.2015 18:54
Letzter Beitrag: Bitklopfer
  Float über I2C zwischen 2 Arduinos UNO Marduino_UNO 9 1.616 19.10.2015 09:09
Letzter Beitrag: Retian
  Anzahl der Float-Kommastellen bei einem Return Retian 1 704 25.07.2015 18:09
Letzter Beitrag: HaWe
  große 2-dim float-Arrays schnell auf SD speichern und zurücklesen? HaWe 25 2.185 22.06.2015 14:41
Letzter Beitrag: Thorsten Pferdekämper
  float per NRF24 übertragen F2Ingo 9 1.643 14.04.2015 21:21
Letzter Beitrag: F2Ingo
  fehler in anzeige von float avoid 11 1.905 12.04.2015 16:32
Letzter Beitrag: HaWe
  Temperatursensor SHT75 um 3 Grad ungenau Cray-1 4 1.105 26.01.2015 14:45
Letzter Beitrag: RMR
  Grad - Zeichen Georg 3 2.323 07.10.2014 20:34
Letzter Beitrag: Stefan
  Float am LCD mit 5-6 Nachkommastellen HTO 17 7.436 04.10.2014 10:09
Letzter Beitrag: tito-t

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste