1 #include "common/util.h"
2 #include "angularunits.h"
4 static double sDMS2deg(double val
)
9 QString
qstr(QString::number(qAbs(val
), 'f', 7));
10 QByteArray ba
= qstr
.toLatin1();
11 const char *str
= ba
.constData();
12 decimal
= strrchr(str
, '.');
13 int deg
= Util::str2int(str
, decimal
- str
);
14 int min
= Util::str2int(decimal
+ 1, 2);
15 int sec
= Util::str2int(decimal
+ 3, 2);
16 int f
= Util::str2int(decimal
+ 5, 3);
18 angle
= deg
+ min
/60.0 + sec
/3600.0 + (f
/1000.0)/3600.0;
20 return (val
< 0) ? -angle
: angle
;
23 static double deg2sDMS(double val
)
25 double aval
= qAbs(val
);
28 double r1
= aval
- deg
;
31 double r2
= r1
- (min
/ 60.0);
33 int sec
= r2
* 3600.0;
34 double r3
= r2
- (sec
/ 3600.0);
35 int f
= (int)(r3
* 3600.0 * 1000.0);
37 QString
str(QString("%1.%2%3%4").arg(deg
).arg(min
, 2, 10, QChar('0'))
38 .arg(sec
, 2, 10, QChar('0')).arg(f
, 3, 10, QChar('0')));
40 return (val
< 0) ? -str
.toDouble() : str
.toDouble();
43 AngularUnits::AngularUnits(int code
) : _code(code
)
69 _f
= 180.0 / (M_PI
* 1000000.0);
76 double AngularUnits::toDegrees(double val
) const
78 return (_code
== 9110) ? sDMS2deg(val
) : val
* _f
;
81 double AngularUnits::fromDegrees(double val
) const
83 return (_code
== 9110) ? deg2sDMS(val
) : val
/ _f
;
87 QDebug
operator<<(QDebug dbg
, const AngularUnits
&au
)
89 dbg
.nospace() << "AngularUnits(" << deg2rad(au
._f
) << ")";