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
  Float über I2C zwischen 2 Arduinos UNO Marduino_UNO 23 9.132 18.08.2020 11:53
Letzter Beitrag: hotsystems
  Float array über NRF24L01 senden und empfangen Flo3107 6 1.160 04.09.2019 21:55
Letzter Beitrag: Tommy56
  Das Zeichen "°" (Grad) ausgeben Rockman 6 2.448 16.06.2019 16:39
Letzter Beitrag: Rockman
  float to uint8_t grobby 2 1.193 22.12.2018 16:39
Letzter Beitrag: grobby
  Bei Power ein geht der Servo auf 90 Grad ? Franz54 12 4.401 09.01.2018 20:55
Letzter Beitrag: Franz54
  Rechnen mit float und unsigned long Rudi 3 3.871 03.06.2016 12:41
Letzter Beitrag: hotsystems
  float in eeprom goldfisch 4 4.543 28.12.2015 18:54
Letzter Beitrag: Bitklopfer
  Anzahl der Float-Kommastellen bei einem Return Retian 1 2.645 25.07.2015 18:09
Letzter Beitrag: HaWe
  große 2-dim float-Arrays schnell auf SD speichern und zurücklesen? HaWe 25 6.764 22.06.2015 14:41
Letzter Beitrag: Thorsten Pferdekämper
  float per NRF24 übertragen F2Ingo 9 7.177 14.04.2015 21:21
Letzter Beitrag: F2Ingo

Gehe zu:


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