68 lines
2.0 KiB
C++
68 lines
2.0 KiB
C++
/*
|
||
* © Copyright 2014 – Urheberrechtshinweis
|
||
* Alle Rechte vorbehalten / All Rights Reserved
|
||
*
|
||
* Programmcode ist urheberrechtlich geschuetzt.
|
||
* Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner.
|
||
* Keine Verwendung ohne explizite Genehmigung.
|
||
* (vgl. § 106 ff UrhG / § 97 UrhG)
|
||
*/
|
||
|
||
#ifndef GPSDATA_H
|
||
#define GPSDATA_H
|
||
|
||
#include "../../data/Timestamp.h"
|
||
#include "../../geo/EarthPos.h"
|
||
#include "../../math/Floatingpoint.h"
|
||
|
||
struct GPSData {
|
||
|
||
/** time this measurement was received (NOT the GPS-time) */
|
||
Timestamp tsReceived;
|
||
|
||
FPDefault lat; // deg
|
||
FPDefault lon; // deg
|
||
FPDefault alt; // m above sea-level
|
||
|
||
FPDefault accuracy; // m [might be NAN]
|
||
FPDefault speed; // m/s [might be NAN]
|
||
|
||
/** ctor for invalid/unknown data */
|
||
GPSData() : tsReceived(), lat(NAN), lon(NAN), alt(NAN), accuracy(NAN), speed(NAN) {;}
|
||
|
||
/** ctor */
|
||
GPSData(const Timestamp tsReceived, const float lat, const float lon, const float alt) : tsReceived(tsReceived), lat(lat), lon(lon), alt(alt), accuracy(NAN), speed(NAN) {;}
|
||
|
||
/** ctor */
|
||
GPSData(const Timestamp tsReceived, const float lat, const float lon, const float alt, const float accuracy) : tsReceived(tsReceived), lat(lat), lon(lon), alt(alt), accuracy(accuracy), speed(NAN) {;}
|
||
|
||
/** get as EarthPos struct */
|
||
EarthPos toEarthPos() const {
|
||
return EarthPos(lat, lon, alt);
|
||
}
|
||
|
||
/** data valid? */
|
||
bool isValid() const {
|
||
return (lat == lat) && (lon == lon);
|
||
}
|
||
|
||
bool operator == (const GPSData& o) const {
|
||
return EQ_OR_NAN(lat, o.lat) &&
|
||
EQ_OR_NAN(lon, o.lon) &&
|
||
EQ_OR_NAN(alt, o.alt) &&
|
||
EQ_OR_NAN(accuracy, o.accuracy) &&
|
||
EQ_OR_NAN(speed, o.speed);
|
||
}
|
||
|
||
std::string asString() const {
|
||
return "(lat: " + std::to_string(lat) + ", lon: " + std::to_string(lon) + ", alt: " + std::to_string(alt) + " acur: " + std::to_string(accuracy) + ")";
|
||
}
|
||
|
||
private:
|
||
|
||
static inline bool EQ_OR_NAN(const FPDefault a, const FPDefault b) {return (a==b) || ( (a!=a) && (b!=b) );}
|
||
|
||
};
|
||
|
||
#endif // GPSDATA_H
|