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 12 3.716 13.01.2018 11:54
Letzter Beitrag: hotsystems
  Bei Power ein geht der Servo auf 90 Grad ? Franz54 12 1.066 09.01.2018 20:55
Letzter Beitrag: Franz54
  Rechnen mit float und unsigned long Rudi 3 1.299 03.06.2016 12:41
Letzter Beitrag: hotsystems
  float in eeprom goldfisch 4 1.839 28.12.2015 18:54
Letzter Beitrag: Bitklopfer
  Anzahl der Float-Kommastellen bei einem Return Retian 1 1.461 25.07.2015 18:09
Letzter Beitrag: HaWe
  große 2-dim float-Arrays schnell auf SD speichern und zurücklesen? HaWe 25 3.454 22.06.2015 14:41
Letzter Beitrag: Thorsten Pferdekämper
  float per NRF24 übertragen F2Ingo 9 3.215 14.04.2015 21:21
Letzter Beitrag: F2Ingo
  fehler in anzeige von float avoid 11 2.924 12.04.2015 16:32
Letzter Beitrag: HaWe
  Temperatursensor SHT75 um 3 Grad ungenau Cray-1 4 1.892 26.01.2015 14:45
Letzter Beitrag: RMR
  Grad - Zeichen Georg 3 5.052 07.10.2014 20:34
Letzter Beitrag: Stefan

Gehe zu:


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