Qt Virtual Chart Table (QVCT)
CDataPosition.hpp
Go to the documentation of this file.
1 // INDENTING (emacs/vi): -*- mode:c++; tab-width:2; c-basic-offset:2; intent-tabs-mode:nil; -*- ex: set tabstop=2 expandtab:
2 
3 /*
4  * Qt Virtual Chart Table (QVCT)
5  * Copyright (C) 2012 Cedric Dufour <http://cedric.dufour.name>
6  * Author: Cedric Dufour <http://cedric.dufour.name>
7  *
8  * The Qt Virtual Chart Table (QVCT) is free software:
9  * you can redistribute it and/or modify it under the terms of the GNU General
10  * Public License as published by the Free Software Foundation, Version 3.
11  *
12  * The Qt Virtual Chart Table (QVCT) is distributed in the hope
13  * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
14  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15  *
16  * See the GNU General Public License for more details.
17  */
18 
19 #ifndef QVCT_CDATAPOSITION_HPP
20 #define QVCT_CDATAPOSITION_HPP
21 
22 // QT
23 class QDataStream;
24 
25 
27 
36 {
37 
38  //------------------------------------------------------------------------------
39  // CONSTANTS / STATIC
40  //------------------------------------------------------------------------------
41 
42 public:
44  static constexpr double UNDEFINED_LONGITUDE = -999;
46  static constexpr double UNDEFINED_LATITUDE = -99;
48  static constexpr double UNDEFINED_ELEVATION = -9999999;
50  static const CDataPosition UNDEFINED;
51 
52 public:
54  static double distanceGC( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
56  static double bearingGC( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
58  static double distanceRL( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
60  static double bearingRL( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
62  static double length( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
63 
64 
65  //------------------------------------------------------------------------------
66  // FIELDS
67  //------------------------------------------------------------------------------
68 
69 private:
71 
72  double fdLongitude;
74 
75  double fdLatitude;
77 
78  double fdElevation;
79 
80 
81  //------------------------------------------------------------------------------
82  // CONSTRUCTORS / DESTRUCTOR
83  //------------------------------------------------------------------------------
84 
85 public:
86  CDataPosition();
90  CDataPosition( double _fdLongitude, double _fdLatitude,
91  double _fdElevation = UNDEFINED_ELEVATION );
92  CDataPosition( const CDataPosition& _roDataPosition );
93  virtual ~CDataPosition() {};
94 
95 
96  //------------------------------------------------------------------------------
97  // METHODS
98  //------------------------------------------------------------------------------
99 
100  // SETTERS
101 public:
103 
106  void setPosition( double _fdLongitude, double _fdLatitude,
107  double _fdElevation = UNDEFINED_ELEVATION );
109  void setPosition( const CDataPosition& _roDataPosition );
111 
112  void resetPosition();
114  void setElevation( double _fdElevation ) { fdElevation = _fdElevation; };
116 
118 
119  // GETTERS
120 public:
122  double getLongitude() const { return fdLongitude; };
124  double getLatitude() const { return fdLatitude; };
126  double getElevation() const { return fdElevation; };
127 
128  // OTHER
129 public:
131  void serialize( QDataStream& _rqDataStream ) const;
133  void unserialize( QDataStream& _rqDataStream );
134 
135 
136  // OPERATORS
137 public:
139 
141  bool operator==( const CDataPosition& _roPosition ) const;
143 
145  bool operator!=( const CDataPosition& _roPosition ) const;
146 
147  // COMPARATORS
148 public:
150  static bool compareLongitudeAscending( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
152  static bool compareLongitudeDescending( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
154  static bool compareLatitudeAscending( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
156  static bool compareLatitudeDescending( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
158  static bool compareElevationAscending( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
160  static bool compareElevationDescending( const CDataPosition& _roPosition1, const CDataPosition& _roPosition2 );
161 
162 };
163 
164 #endif // QVCT_CDATAPOSITION_HPP
(Geographical) Position data [long,lat,elev]
double fdElevation
Elevation, in meters.
double getLongitude() const
Returns this position's longitude, in degrees.
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.
double getElevation() const
Returns this position's elevation, in meters.
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.
double getLatitude() const
Returns this position's latitude, in degrees.
static const CDataPosition UNDEFINED
Specific value for an undefined position.
static constexpr double UNDEFINED_LONGITUDE
Specific value for an undefined longitude.
void setElevation(double _fdElevation)
Sets the elevation, in meters.
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 resetElevation()
Resets the elevation (to an undefined elevation)
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.
virtual ~CDataPosition()