Files
Cnomicon/include/libgps++/GpsPoint.h
2021-01-22 10:16:20 -05:00

124 lines
4.0 KiB
C++

//
// 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 &copy);
// 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