23 #include <QDataStream>
45 double __fdLonD = __fdLon2 - __fdLon1, __fdLatD = __fdLat2 - __fdLat1;
48 double __fdLonS = sin( __fdLonD/2.0 ), __fdLatS = sin( __fdLatD/2.0 );
49 double __fdA = __fdLatS*__fdLatS + cos( __fdLat1 )*cos( __fdLat2 )*__fdLonS*__fdLonS;
50 double __fdDistance = ( WGS84A + WGS84B ) * atan2( sqrt( __fdA ), sqrt( 1.0-__fdA ) );
59 double __fdLonD = __fdLon2 - __fdLon1;
62 double __fdBearing = atan2( sin( __fdLonD )*cos( __fdLat2 ),
63 cos( __fdLat1 )*sin( __fdLat2 ) - sin( __fdLat1 )*cos( __fdLat2 )*cos( __fdLonD ) );
64 __fdBearing *= RAD_2_DEG;
65 if( __fdBearing < 0 ) __fdBearing += 360;
74 double __fdLonD = __fdLon2 - __fdLon1, __fdLatD = __fdLat2 - __fdLat1;
77 double __fdPhiD = log( tan( __fdLat2/2.0 + GPS_PI/4.0 ) / tan( __fdLat1/2.0 + GPS_PI/4.0 ) );
78 double __fdQ = __fdPhiD != 0 ? __fdLatD/__fdPhiD : cos( __fdLat1 );
79 if( fabs( __fdLonD ) > GPS_PI ) __fdLonD = __fdLonD > 0 ? __fdLonD - GPS_PI*2.0 : GPS_PI*2.0 + __fdLonD;
80 double __fdDistance = ( WGS84A + WGS84B ) / 2.0 * sqrt( __fdLatD*__fdLatD + __fdLonD*__fdLonD * __fdQ*__fdQ );
89 double __fdLonD = __fdLon2 - __fdLon1;
92 double __fdPhiD = log( tan( __fdLat2/2.0 + GPS_PI/4.0 ) / tan( __fdLat1/2.0 + GPS_PI/4.0 ) );
93 if( fabs( __fdLonD ) > GPS_PI ) __fdLonD = __fdLonD > 0 ? __fdLonD - GPS_PI*2.0 : GPS_PI*2.0 + __fdLonD;
94 double __fdBearing = atan2( __fdLonD, __fdPhiD );
95 __fdBearing *= RAD_2_DEG;
96 if( __fdBearing < 0 ) __fdBearing += 360;
106 __fdDistance = sqrt( __fdDistance*__fdDistance + __fdClimb*__fdClimb );
124 setPosition( _fdLongitude, _fdLatitude, _fdElevation );
146 while( _fdLatitude >= 270 ) _fdLatitude -= 360;
147 while( _fdLatitude <= -270 ) _fdLatitude += 360;
148 if( _fdLatitude > 90 ) { _fdLatitude = 180 - _fdLatitude; _fdLongitude += 180; }
149 if( _fdLatitude < -90 ) { _fdLatitude = -180 - _fdLatitude; _fdLongitude += 180; }
152 while( _fdLongitude > 180 ) _fdLongitude -= 360;
153 while( _fdLongitude < -180 ) _fdLongitude += 360;
(Geographical) Position data [long,lat,elev]
double fdElevation
Elevation, in meters.
static bool compareElevationAscending(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Elevation (ascending sort) comparison operator.
static double bearingGC(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Returns the great-circle (initial) bearing between two points, in degrees.
static constexpr double UNDEFINED_LATITUDE
Specific value for an undefined latitude.
static bool compareElevationDescending(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Elevation (descending sort) comparison operator.
void resetPosition()
Resets all coordinates (to an undefined position)
double fdLatitude
Latitude, in degrees.
static bool compareLatitudeDescending(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Latitude (descending sort) comparison operator.
static double bearingRL(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Returns the rhumb-line (constant) bearing between two points, in degrees.
static double distanceRL(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Returns the rhumb-line distance between two points, in meters.
static const CDataPosition UNDEFINED
Specific value for an undefined position.
static constexpr double UNDEFINED_LONGITUDE
Specific value for an undefined longitude.
void serialize(QDataStream &_rqDataStream) const
Serializes (store) this object's data to binary format.
static bool compareLongitudeDescending(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Longitude (descending sort) comparison operator.
void setPosition(double _fdLongitude, double _fdLatitude, double _fdElevation=UNDEFINED_ELEVATION)
Sets new coordinates.
static constexpr double UNDEFINED_ELEVATION
Specific value for an undefined elevation.
double fdLongitude
Longitude, in degrees.
static double length(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Returns the length (rhumb-line distance and elevation delta) between two points, in meters.
bool operator!=(const CDataPosition &_roPosition) const
Inequality operator.
void unserialize(QDataStream &_rqDataStream)
Unserializes (restore) this object's data from binary format.
bool operator==(const CDataPosition &_roPosition) const
Equality operator.
static bool compareLatitudeAscending(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Latitude (ascending sort) comparison operator.
static double distanceGC(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Returns the WGS84-corrected great-circle distance between two points, in meters.
static bool compareLongitudeAscending(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Longitude (ascending sort) comparison operator.