3 #include "common/wgs84.h"
4 #include "common/csv.h"
7 QMap
<int, Ellipsoid
> Ellipsoid::_ellipsoids
= defaults();
9 const Ellipsoid
&Ellipsoid::WGS84()
11 static Ellipsoid
e(WGS84_RADIUS
, WGS84_FLATTENING
);
15 QMap
<int, Ellipsoid
> Ellipsoid::defaults()
17 QMap
<int, Ellipsoid
> map
;
18 map
.insert(7030, WGS84());
22 const Ellipsoid
&Ellipsoid::ellipsoid(int id
)
24 QMap
<int, Ellipsoid
>::const_iterator
it(_ellipsoids
.find(id
));
25 static const Ellipsoid null
;
27 if (it
== _ellipsoids
.constEnd())
33 bool Ellipsoid::loadList(const QString
&path
)
40 if (!file
.open(QFile::ReadOnly
)) {
41 qWarning("Error opening ellipsoids file: %s: %s", qPrintable(path
),
42 qPrintable(file
.errorString()));
46 while (!csv
.atEnd()) {
47 if (!csv
.readEntry(entry
) || entry
.size() < 4) {
48 qWarning("%s:%d: Parse error", qPrintable(path
), csv
.line());
52 int id
= entry
.at(1).toInt(&res
);
54 qWarning("%s: %d: Invalid ellipsoid code", qPrintable(path
),
58 double radius
= entry
.at(2).toDouble(&res
);
60 qWarning("%s: %d: Invalid radius", qPrintable(path
), csv
.line());
63 double flattening
= entry
.at(3).toDouble(&res
);
65 qWarning("%s: %d: Invalid flattening", qPrintable(path
), csv
.line());
69 Ellipsoid
e(radius
, 1.0/flattening
);
70 _ellipsoids
.insert(id
, e
);
76 Ellipsoid::Ellipsoid(double radius
, double flattening
)
77 : _radius(radius
), _flattening(flattening
)
79 _es
= 2.0 * flattening
- flattening
* flattening
;
80 _e2s
= (1.0 / (1.0 - _es
)) - 1.0;
81 _b
= radius
* (1.0 - flattening
);
85 QDebug
operator<<(QDebug dbg
, const Ellipsoid
&ellipsoid
)
87 dbg
.nospace() << "Ellipsoid(" << ellipsoid
.radius() << ", "
88 << 1.0 / ellipsoid
.flattening() << ")";