124 lines
4.0 KiB
C++
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 ©);
|
|
|
|
// 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
|