// // Linux GPS // /* prevent multiple inclusions */ #ifndef __GpsPoint__ #define __GpsPoint__ /* includes *****************************************************************/ #include "GpsMath.h" /* defines ******************************************************************/ /* macros *******************************************************************/ /* structs & typedefs *******************************************************/ /* c class definitions ******************************************************/ // // Gps Point on the planet // class GpsPoint : public GpsMath { // public data public: timespec TimeStamp; double Latitude; double Longitude; double Altitude; double Speed; // m/sec double Heading; // deg // fix information (GpsListener) for point int Fix; // GPGGA int Mode; // GPGSA int Type; // GPGSA double Accel; // m/sec2 double Yaw; // deg/sec (-left, +right) // parser // protected data protected: // private data private: // static data // private methods // public methods public: // constructors GpsPoint(); GpsPoint( double lat, double lon ); GpsPoint(const GpsPoint ©); // destructor virtual ~GpsPoint(); // operators GpsPoint &operator=(const GpsPoint &rhs); // virtual functions // public methods double GetLatitude(void) {return Latitude;}; double GetLongitude(void) {return Longitude;}; double GetAltitude(void) {return Altitude;}; double GetElevation(void) {return Altitude;}; void GetPosition( double *lat, double *lon, double *elev=NULL ); double GetSpeed(void) {return Speed;}; double GetHeading(void) {return Heading;}; timespec GetTimeVal(void) {return TimeStamp;}; uint64_t GetTimeStamp(void) {return (TimeStamp.tv_sec*1000L)+(TimeStamp.tv_nsec/1000000L);}; time_t GetTimeStampSec(void) {return TimeStamp.tv_sec;}; void SetLatitude(double lat) {Latitude = lat;}; void SetLongitude(double lon) {Longitude = lon;}; void SetAltitude(double alt) {Altitude = alt;}; void SetElevation(double ele) {Altitude = ele;}; void SetPosition(double lat, double lon, double ele = 0.0) {Latitude=lat;Longitude=lon;Altitude=ele;}; void SetSpeed(double spd) {Speed = spd;}; // kph void SetHeading(double hdg) {Heading = hdg;}; void SetTimeStamp(timespec &tv) {TimeStamp=tv;}; void SetTimeStamp(time_t t) {TimeStamp.tv_sec=t;TimeStamp.tv_nsec=0;}; void SetTimeStamp(uint64_t t); void SetTimeStamp(double t); void SetTimeStamp(const char *str); void AddMeters( double x, double y ); // add meters void Extrapolate( double speed, double accel, double yaw, double time ); double Bearing( const GpsPoint &gpt ); // bearing to point double Distance( const GpsPoint &gpt ); // distance to point double Distance( double lat, double lon ); double Travel( double x, double y, double z ); double DistanceX( const GpsPoint &gpt ) { return GpsMath::DistanceX(Latitude, Longitude, gpt.Latitude, gpt.Longitude); }; double DistanceY( const GpsPoint &gpt ) { return GpsMath::DistanceY(Latitude, Longitude, gpt.Latitude, gpt.Longitude); }; double DistanceX(double lat, double lon) { return GpsMath::DistanceX(Latitude, Longitude, Latitude, lon); }; double DistanceY(double lat, double lon) { return GpsMath::DistanceY(Latitude, Longitude, lat, Longitude); }; double DistanceX(double lon) { return GpsMath::DistanceX(Latitude, Longitude, Latitude, lon); }; double DistanceY(double lat) { return GpsMath::DistanceY(Latitude, Longitude, lat, Longitude); }; double DistanceXY( const GpsPoint &gpt1, const GpsPoint &gpt2, double &x, double &y ); double DistanceXY( const GpsPoint &gpt1, double lat, double lon, double &x, double &y ); bool Inside( const GpsPoint polygon[], int num ); bool Traversed( GpsPoint &gpt, const GpsPoint polygon[], int num ); // static methods }; #endif