]> git.mxchange.org Git - flightgear.git/commitdiff
Fix #1778: incorrect HUD values
authorTorsten Dreyer <torsten@t3r.de>
Mon, 13 Jul 2015 14:23:56 +0000 (16:23 +0200)
committerTorsten Dreyer <torsten@t3r.de>
Mon, 13 Jul 2015 14:23:56 +0000 (16:23 +0200)
negative latitude/longitude coordinates resulted in negative WEST/
SOUTH coordinates for the default format 0 (zero).
This should be now fixed so that
+12.3 gets formatted as 12.3N/E
-12.3 gets formatted as 12.3S/W

src/Main/fg_props.cxx

index 7cedc3064c50b56b49eec2bb5b682b0ae826c877..42128b644a2dc481ed67e65351aa54d691dea081 100644 (file)
@@ -391,6 +391,7 @@ FGProperties::getLongitudeString ()
   double d = _longDeg->getDoubleValue();
   int format = _lonLatformat->getIntValue();
   char c = d < 0.0 ? 'W' : 'E';
+  d = fabs(d);
 
   if (format == 0) {
     snprintf(buf, 32, "%3.6f%c", d, c);
@@ -399,18 +400,18 @@ FGProperties::getLongitudeString ()
     // dd mm.mmm' (DMM-Format) -- uses a round-off factor tailored to the
     // required precision of the minutes field (three decimal places),
     // preventing minute values of 60.
-    double deg = fabs(d) + 5.0E-4 / 60.0;
-    double min = fabs(deg - int(deg)) * 60.0 - 4.999E-4;
-    snprintf(buf, 32, "%d*%06.3f%c", int(d < 0.0 ? -deg : deg), min, c);
+    double deg = d + 5.0E-4 / 60.0;
+    double min = (deg - int(deg)) * 60.0 - 4.999E-4;
+    snprintf(buf, 32, "%d*%06.3f%c", int(deg), min, c);
 
   } else {
     // mm'ss.s'' (DMS-Format) -- uses a round-off factor tailored to the
     // required precision of the seconds field (one decimal place),
     // preventing second values of 60.
-    double deg = fabs(d) + 0.05 / 3600.0;
+    double deg = d + 0.05 / 3600.0;
     double min = (deg - int(deg)) * 60.0;
     double sec = (min - int(min)) * 60.0 - 0.049;
-    snprintf(buf, 32, "%d*%02d %04.1f%c", int(d < 0.0 ? -deg : deg),
+    snprintf(buf, 32, "%d*%02d %04.1f%c", int(deg),
         int(min), fabs(sec), c);
   }
   buf[31] = '\0';
@@ -424,20 +425,21 @@ FGProperties::getLatitudeString ()
   double d = _latDeg->getDoubleValue();
   int format = _lonLatformat->getIntValue();
   char c = d < 0.0 ? 'S' : 'N';
+  d = fabs(d);
 
   if (format == 0) {
     snprintf(buf, 32, "%3.6f%c", d, c);
 
   } else if (format == 1) {
-    double deg = fabs(d) + 5.0E-4 / 60.0;
-    double min = fabs(deg - int(deg)) * 60.0 - 4.999E-4;
-    snprintf(buf, 32, "%d*%06.3f%c", int(d < 0.0 ? -deg : deg), min, c);
+    double deg = d + 5.0E-4 / 60.0;
+    double min = (deg - int(deg)) * 60.0 - 4.999E-4;
+    snprintf(buf, 32, "%d*%06.3f%c", int(deg), min, c);
 
   } else {
-    double deg = fabs(d) + 0.05 / 3600.0;
+    double deg = d + 0.05 / 3600.0;
     double min = (deg - int(deg)) * 60.0;
     double sec = (min - int(min)) * 60.0 - 0.049;
-    snprintf(buf, 32, "%d*%02d %04.1f%c", int(d < 0.0 ? -deg : deg),
+    snprintf(buf, 32, "%d*%02d %04.1f%c", int(deg),
         int(min), fabs(sec), c);
   }
   buf[31] = '\0';