1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-10-07 07:13:21 +02:00
GPXSee/src/map/datum.h

64 lines
1.7 KiB
C
Raw Normal View History

#ifndef DATUM_H
#define DATUM_H
2018-01-08 23:47:45 +01:00
#include <cmath>
#include <QList>
#include <QDebug>
2017-11-26 18:54:03 +01:00
#include "common/coordinates.h"
#include "ellipsoid.h"
#include "geocentric.h"
class Datum
{
public:
Datum() : _ellipsoid(0), _shift(None), _dx(NAN), _dy(NAN), _dz(NAN),
_rx(NAN), _ry(NAN), _rz(NAN), _ds(NAN) {}
Datum(const Ellipsoid *ellipsoid, double dx, double dy, double dz,
double rx, double ry, double rz, double ds);
Datum(const Ellipsoid *ellipsoid, double dx, double dy, double dz);
const Ellipsoid *ellipsoid() const {return _ellipsoid;}
double dx() const {return _dx;}
double dy() const {return _dy;}
double dz() const {return _dz;}
double ds() const {return _ds;}
double rx() const {return _rx;}
double ry() const {return _ry;}
double rz() const {return _rz;}
2017-07-12 21:23:56 +02:00
bool isNull() const
{return !_ellipsoid;}
bool isValid() const
{return (_ellipsoid && !std::isnan(_dx) && !std::isnan(_dy)
&& !std::isnan(_dz) && !std::isnan(_ds) && !std::isnan(_rx)
&& !std::isnan(_ry) && !std::isnan(_rz));}
2017-06-29 19:53:42 +02:00
Coordinates toWGS84(const Coordinates &c) const;
2018-01-08 23:47:45 +01:00
Coordinates fromWGS84(const Coordinates &c) const;
private:
enum ShiftType {
None,
Molodensky,
Helmert
};
Point3D helmert(const Point3D &p) const;
Point3D helmertr(const Point3D &p) const;
const Ellipsoid *_ellipsoid;
ShiftType _shift;
double _dx, _dy, _dz, _rx, _ry, _rz, _ds;
};
inline bool operator==(const Datum &d1, const Datum &d2)
{return (*d1.ellipsoid() == *d2.ellipsoid() && d1.dx() == d2.dx()
&& d1.dy() == d2.dy() && d1.dz() == d2.dz() && d1.rx() == d2.rx()
&& d1.ry() == d2.ry() && d1.rz() == d2.rz() && d1.ds() == d2.ds());}
#ifndef QT_NO_DEBUG
2018-01-08 23:47:45 +01:00
QDebug operator<<(QDebug dbg, const Datum &datum);
#endif // QT_NO_DEBUG
2018-01-08 23:47:45 +01:00
#endif // DATUM_H