PositionWGS84.hpp
Go to the documentation of this file.
1 //
2 // PositionWGS84.hpp
3 //
4 // Type of positions in the WGS-84 coordinate system.
5 //
6 // 2011-11-11, Willhvo
7 //
8 
9 #ifndef POSITIONWGS84_HPP
10 #define POSITIONWGS84_HPP
11 
12 #include "../BasicDatatypes.hpp"
13 #include "../tools/MathToolbox.hpp"
14 #include "Point3D.hpp"
15 
16 namespace datatypes
17 {
18 
19 //
20 // Position in the WGS-84 coordinate system.
21 //
22 // WGS-84 coordinates can be provided by several data sources like GPS
23 // receivers, IMUs or other positioning systems.
24 //
25 class PositionWGS84 : public BasicData
26 {
27 public:
28 
34  {
35  Unknown = 0,
44  IMU,
48  };
49 
50  PositionWGS84();
51 
52  virtual ~PositionWGS84();
53 
54  // Estimate the memory usage of this object
55  inline virtual const UINT32 getUsedMemory() const {return (sizeof(*this));};
56 
68  void setMeasurementTime(time_t val) { m_timeOfMeasurement = val; }
69 
87  void setLatitudeInRad(double val);
88 
89  void transformToTangentialPlane(const PositionWGS84& origin, double* easting, double* northing, double* height) const;
90  void transformToTangentialPlane(const PositionWGS84& origin, double* easting, double* northing) const;
91  void transformFromTangentialPlane(double dX, double dY, const PositionWGS84& origin);
92 
98  double distanceToPos(const PositionWGS84& pos) const;
99 
117  void setLatitudeInDeg(double val) { setLatitudeInRad(val * deg2rad); }
118 
119  void setLatitudeInNMEA(double Dm, char H);
120 
137  void setLatitudeInNMEA(double Dm) { setLatitudeInNMEA(Dm, 'N'); }
138 
154  void setLatitudeSigmaInMeter(double val) { m_latitudeSigma = val; }
155 
163  void setLongitudeInRad(double val);
164 
182  void setLongitudeInDeg(double val) { setLongitudeInRad(val * deg2rad); }
183 
201  void setLongitudeInNMEA(double Dm, char H);
202 
219  void setLongitudeInNMEA(double Dm) { setLongitudeInNMEA(Dm, 'E'); }
220 
236  void setLongitudeSigmaInMeter(double val) { m_longitudeSigma = val; }
237 
252  void setAltitudeInMeterMSL(double val) { m_altitudeMSL = val; }
253 
265  void setAltitudeSigmaInMeterMSL(double val) { m_altitudeMSLSigma = val; }
266 
275  void setCourseAngleInRad(double val)
276  {
278  if (m_courseAngle <= 0.0)
279  {
280  m_courseAngle += 2.0 * PI;
281  }
282  }
283 
292  void setCourseAngleInDeg(double val) { setCourseAngleInRad(val * deg2rad); }
293 
305  void setCourseAngleSigmaInRad(double val) { m_courseAngleSigma = val; }
306 
319 
320  void setYawAngleInRad(double val) { m_yawAngle = val; }
321  void setYawAngleInDeg(double val) { setYawAngleInRad(val * deg2rad); }
322 
323  void setYawAngleSigmaInRad(double val) { m_yawAngleSigma = val; }
325 
326  void setPitchAngleInRad(double val) { m_pitchAngle = val; }
327  void setPitchAngleInDeg(double val) { setPitchAngleInRad(val * deg2rad); }
328 
329  void setPitchAngleSigmaInRad(double val) { m_pitchAngleSigma = val; }
331 
332  void setRollAngleInRad(double val) { m_rollAngle = val; }
333  void setRollAngleInDeg(double val) { setRollAngleInRad(val * deg2rad); }
334 
335  void setRollAngleSigmaInRad(double val) { m_rollAngleSigma = val; }
337 
345  void setSource(const PositionWGS84SourceType val) { m_source = val; }
346 
347  void resetToDefault();
348 
350 
355 
363  const time_t& getMeasurementTime() const { return m_timeOfMeasurement; }
364 
372  const time_t& getTimestamp() const { return m_timeOfMeasurement; }
373 
383  double getLatitudeInRad() const { return m_latitude; }
384 
394  double getLatitudeInDeg() const { return (m_latitude * rad2deg); }
395 
405  double getLongitudeInRad() const { return m_longitude; }
406 
416  double getLongitudeInDeg() const { return (m_longitude * rad2deg); }
417 
435  double getCourseAngleInRad() const { return m_courseAngle; }
436 
454  double getCourseAngleInDeg() const { return (m_courseAngle * rad2deg); }
455 
473  double getYawAngleInRad() const { return m_yawAngle; }
474 
492  double getYawAngleInDeg() const { return (m_yawAngle * rad2deg); }
493 
494  double getYawAngleSigmaInRad() const { return m_yawAngleSigma; }
495  double getYawAngleSigmaInDeg() const { return (m_yawAngleSigma * rad2deg); }
496 
497  double getPitchAngleInRad() const { return m_pitchAngle; }
498  double getPitchAngleInDeg() const { return (m_pitchAngle * rad2deg); }
499 
500  double getPitchAngleSigmaInRad() const { return m_pitchAngleSigma; }
501  double getPitchAngleSigmaInDeg() const { return (m_pitchAngleSigma * rad2deg); }
502 
503  double getRollAngleInRad() const { return m_rollAngle; }
504  double getRollAngleInDeg() const { return (m_rollAngle * rad2deg); }
505 
506  double getRollAngleSigmaInRad() const { return m_rollAngleSigma; }
507  double getRollAngleSigmaInDeg() const { return (m_rollAngleSigma * rad2deg); }
508 
510  bool operator==(const PositionWGS84& other) const;
511  bool operator!=(const PositionWGS84& other) const { return !(*this == other); }
512 
514 
520  double getAltitudeInMeterMSL() const { return m_altitudeMSL; }
521 
522  std::string toString() const;
523 
531 
532  std::string getSourceString() const;
533 
534 
541  double dist( const PositionWGS84& pos ) const;
542 
543  Point3D getCartesianRelPos(const PositionWGS84& orign) const;
544 
545 private:
546  double NMEA2rad( double Dm );
547 
549  // NOTE 2008/01/18 (dw) : Change VERSION in cpp file when the interface is changed or bugs are fixed.
550  // Document changes in the HISTORY above.
551  static const std::string VERSION;
552 
554 
555  // Unit Serialized size:
556 // UINT8 m_deviceID; // ID of device + 1 Bytes
557  double m_latitude; // [rad] + 8 Bytes
558  double m_latitudeSigma; // [m] + 8 Bytes
559  double m_longitude; // [rad] + 8 Bytes
560  double m_longitudeSigma; // [m] + 8 Bytes
561  double m_altitudeMSL; // [m] + 8 Bytes
562  double m_altitudeMSLSigma; // [m] + 8 Bytes
563  double m_courseAngle; // [rad] + 8 Bytes
564  double m_courseAngleSigma; // [rad] + 8 Bytes
565  double m_yawAngle; // [rad] + 8 Bytes
566  double m_yawAngleSigma; // [rad] + 8 Bytes
567  double m_pitchAngle; // [rad] + 8 Bytes
568  double m_pitchAngleSigma; // [rad] + 8 Bytes
569  double m_rollAngle; // [rad] + 8 Bytes
570  double m_rollAngleSigma; // [rad] + 8 Bytes
571  PositionWGS84SourceType m_source; // Source of position information + 2 Bytes (encoded as UINT16)
572  // = 115 Bytes
573 };
574 
575 std::string toString(const PositionWGS84::PositionWGS84SourceType& type);
576 
577 
578 } // namespace datatypes
579 
580 
581 
582 #endif // POSITIONWGS84_HPP
datatypes::PositionWGS84::setLongitudeInRad
void setLongitudeInRad(double val)
Sets the longitude value of the WGS-84 position.
Definition: PositionWGS84.cpp:104
datatypes::PositionWGS84::setPitchAngleInDeg
void setPitchAngleInDeg(double val)
Definition: PositionWGS84.hpp:327
datatypes::PositionWGS84::setRollAngleSigmaInRad
void setRollAngleSigmaInRad(double val)
Definition: PositionWGS84.hpp:335
datatypes::PositionWGS84::getLatitudeInDeg
double getLatitudeInDeg() const
Returns the latitude value of the WGS-84 position.
Definition: PositionWGS84.hpp:394
datatypes::PositionWGS84::GPS_GBAS
@ GPS_GBAS
Definition: PositionWGS84.hpp:41
datatypes::PositionWGS84::Manual
@ Manual
Definition: PositionWGS84.hpp:46
datatypes::PositionWGS84::getLatitudeInRad
double getLatitudeInRad() const
Returns the latitude value of the WGS-84 position.
Definition: PositionWGS84.hpp:383
datatypes::PositionWGS84::setLongitudeInNMEA
void setLongitudeInNMEA(double Dm, char H)
Sets the longitude value of the WGS-84 position.
Definition: PositionWGS84.cpp:177
datatypes::PositionWGS84::m_longitudeSigma
double m_longitudeSigma
Definition: PositionWGS84.hpp:560
datatypes::PositionWGS84::m_latitude
double m_latitude
Definition: PositionWGS84.hpp:557
datatypes::PositionWGS84::getYawAngleSigmaInRad
double getYawAngleSigmaInRad() const
Definition: PositionWGS84.hpp:494
datatypes::PositionWGS84::GPS_SBAS_Omnistar_VBS
@ GPS_SBAS_Omnistar_VBS
Definition: PositionWGS84.hpp:39
datatypes::PositionWGS84::setYawAngleInDeg
void setYawAngleInDeg(double val)
Definition: PositionWGS84.hpp:321
datatypes::PositionWGS84::getSource
PositionWGS84SourceType getSource() const
Returns the type of source that identifies the type of the device that created this object.
Definition: PositionWGS84.hpp:530
datatypes::PositionWGS84::operator==
bool operator==(const PositionWGS84 &other) const
Equality predicate.
Definition: PositionWGS84.cpp:43
datatypes::PositionWGS84::operator!=
bool operator!=(const PositionWGS84 &other) const
Definition: PositionWGS84.hpp:511
datatypes::PositionWGS84::setLongitudeInNMEA
void setLongitudeInNMEA(double Dm)
Sets the longitude value of the WGS-84 position.
Definition: PositionWGS84.hpp:219
datatypes::PositionWGS84::m_courseAngleSigma
double m_courseAngleSigma
Definition: PositionWGS84.hpp:564
datatypes::PositionWGS84::setMeasurementTime
void setMeasurementTime(time_t val)
Sets the time when the position measurement was taken.
Definition: PositionWGS84.hpp:68
datatypes::PositionWGS84::NMEA2rad
double NMEA2rad(double Dm)
Calculates the WGS84 coordinate in rad from the mixed degree-minute value usually found on NMEA compa...
Definition: PositionWGS84.cpp:123
datatypes::PositionWGS84::LandmarkPositioning
@ LandmarkPositioning
Definition: PositionWGS84.hpp:45
datatypes::PositionWGS84::setLongitudeInDeg
void setLongitudeInDeg(double val)
Sets the longitude value of the WGS-84 position.
Definition: PositionWGS84.hpp:182
datatypes::PositionWGS84::m_latitudeSigma
double m_latitudeSigma
Definition: PositionWGS84.hpp:558
datatypes::PositionWGS84::m_pitchAngle
double m_pitchAngle
Definition: PositionWGS84.hpp:567
datatypes::PositionWGS84
Definition: PositionWGS84.hpp:25
datatypes::PositionWGS84::getLongitudeInRad
double getLongitudeInRad() const
Returns the longitude value of the WGS-84 position.
Definition: PositionWGS84.hpp:405
datatypes::PositionWGS84::getUsedMemory
virtual const UINT32 getUsedMemory() const
Definition: PositionWGS84.hpp:55
datatypes::PositionWGS84::getLongitudeInDeg
double getLongitudeInDeg() const
Returns the longitude value of the WGS-84 position.
Definition: PositionWGS84.hpp:416
datatypes::PositionWGS84::setSource
void setSource(const PositionWGS84SourceType val)
Sets the source of the position measurement.
Definition: PositionWGS84.hpp:345
datatypes::PositionWGS84::setAltitudeInMeterMSL
void setAltitudeInMeterMSL(double val)
Sets altitude value.
Definition: PositionWGS84.hpp:252
datatypes::PositionWGS84::getSourceString
std::string getSourceString() const
Returns a std::string with a describtion of the WGS-84 position source.
Definition: PositionWGS84.cpp:223
datatypes::PositionWGS84::CAN
@ CAN
Definition: PositionWGS84.hpp:47
datatypes::PositionWGS84::m_longitude
double m_longitude
Definition: PositionWGS84.hpp:559
datatypes::BasicData
Definition: BasicDatatypes.hpp:95
datatypes::PositionWGS84::getPitchAngleInDeg
double getPitchAngleInDeg() const
Definition: PositionWGS84.hpp:498
datatypes::PositionWGS84::setYawAngleInRad
void setYawAngleInRad(double val)
Definition: PositionWGS84.hpp:320
datatypes::PositionWGS84::setPitchAngleSigmaInDeg
void setPitchAngleSigmaInDeg(double val)
Definition: PositionWGS84.hpp:330
datatypes::PositionWGS84::GPS_SBAS
@ GPS_SBAS
Definition: PositionWGS84.hpp:38
datatypes::PositionWGS84::getPitchAngleInRad
double getPitchAngleInRad() const
Definition: PositionWGS84.hpp:497
Point3D.hpp
datatypes::PositionWGS84::setPitchAngleInRad
void setPitchAngleInRad(double val)
Definition: PositionWGS84.hpp:326
datatypes::PositionWGS84::PositionWGS84SourceType
PositionWGS84SourceType
Definition: PositionWGS84.hpp:33
datatypes::PositionWGS84::getYawAngleSigmaInDeg
double getYawAngleSigmaInDeg() const
Definition: PositionWGS84.hpp:495
datatypes::PositionWGS84::dist
double dist(const PositionWGS84 &pos) const
Calculates the distance in [m] from this to position in argument.
Definition: PositionWGS84.cpp:228
datatypes::PositionWGS84::m_timeOfMeasurement
time_t m_timeOfMeasurement
Definition: PositionWGS84.hpp:553
deg2rad
#define deg2rad
Definition: BasicDatatypes.hpp:37
datatypes::PositionWGS84::getRollAngleInDeg
double getRollAngleInDeg() const
Definition: PositionWGS84.hpp:504
datatypes::PositionWGS84::GPS_GBAS_RTK_Integer
@ GPS_GBAS_RTK_Integer
Definition: PositionWGS84.hpp:43
datatypes::PositionWGS84::m_rollAngleSigma
double m_rollAngleSigma
Definition: PositionWGS84.hpp:570
datatypes::PositionWGS84::getCourseAngleInDeg
double getCourseAngleInDeg() const
Returns the course angle in [deg].
Definition: PositionWGS84.hpp:454
datatypes::PositionWGS84::setCourseAngleSigmaInRad
void setCourseAngleSigmaInRad(double val)
Sets the sigma of the normal distribution describing the confidence about the course angle.
Definition: PositionWGS84.hpp:305
datatypes::PositionWGS84::PositionWGS84
PositionWGS84()
Constructor.
Definition: PositionWGS84.cpp:23
datatypes::PositionWGS84::setRollAngleInDeg
void setRollAngleInDeg(double val)
Definition: PositionWGS84.hpp:333
datatypes::PositionWGS84::setYawAngleSigmaInRad
void setYawAngleSigmaInRad(double val)
Definition: PositionWGS84.hpp:323
datatypes::PositionWGS84::getAltitudeInMeterMSL
double getAltitudeInMeterMSL() const
Returns the altitude in meter above mean sea level.
Definition: PositionWGS84.hpp:520
datatypes::Point3D
This class defines a point in the three-dimensional plane.
Definition: Point3D.hpp:25
datatypes::PositionWGS84::getPitchAngleSigmaInDeg
double getPitchAngleSigmaInDeg() const
Definition: PositionWGS84.hpp:501
datatypes::PositionWGS84::setLatitudeInNMEA
void setLatitudeInNMEA(double Dm, char H)
Sets the latitude value of the WGS-84 position.
Definition: PositionWGS84.cpp:148
datatypes::PositionWGS84::m_pitchAngleSigma
double m_pitchAngleSigma
Definition: PositionWGS84.hpp:568
datatypes::PositionWGS84::transformToTangentialPlane
void transformToTangentialPlane(const PositionWGS84 &origin, double *easting, double *northing, double *height) const
Definition: PositionWGS84.cpp:250
datatypes::PositionWGS84::getCourseAngleInRad
double getCourseAngleInRad() const
Returns the course angle in [rad].
Definition: PositionWGS84.hpp:435
datatypes::PositionWGS84::setAltitudeSigmaInMeterMSL
void setAltitudeSigmaInMeterMSL(double val)
Sets the sigma value of the normal distribution describing the confidence about the altitude measurem...
Definition: PositionWGS84.hpp:265
datatypes::PositionWGS84::getYawAngleInDeg
double getYawAngleInDeg() const
Returns the yaw angle.
Definition: PositionWGS84.hpp:492
datatypes::PositionWGS84::getRollAngleSigmaInRad
double getRollAngleSigmaInRad() const
Definition: PositionWGS84.hpp:506
datatypes::toString
std::string toString(const PositionWGS84::PositionWGS84SourceType &type)
Definition: PositionWGS84.cpp:408
datatypes::PositionWGS84::getYawAngleInRad
double getYawAngleInRad() const
Returns the yaw angle in [rad].
Definition: PositionWGS84.hpp:473
normalizeRadians
double normalizeRadians(double radians)
Definition: MathToolbox.cpp:34
datatypes::PositionWGS84::getRollAngleSigmaInDeg
double getRollAngleSigmaInDeg() const
Definition: PositionWGS84.hpp:507
datatypes::PositionWGS84::setYawAngleSigmaInDeg
void setYawAngleSigmaInDeg(double val)
Definition: PositionWGS84.hpp:324
datatypes::PositionWGS84::GPS_SPS
@ GPS_SPS
Definition: PositionWGS84.hpp:36
datatypes::PositionWGS84::setLatitudeInRad
void setLatitudeInRad(double val)
Sets the latitude value of the WGS-84 position.
Definition: PositionWGS84.cpp:91
datatypes::PositionWGS84::VERSION
static const std::string VERSION
Definition: PositionWGS84.hpp:551
datatypes::PositionWGS84::Unknown
@ Unknown
Definition: PositionWGS84.hpp:35
datatypes::PositionWGS84::~PositionWGS84
virtual ~PositionWGS84()
Definition: PositionWGS84.cpp:29
datatypes::PositionWGS84::m_source
PositionWGS84SourceType m_source
Definition: PositionWGS84.hpp:571
datatypes::PositionWGS84::setLatitudeInNMEA
void setLatitudeInNMEA(double Dm)
Sets the latitude value of the WGS-84 position.
Definition: PositionWGS84.hpp:137
datatypes::PositionWGS84::getPitchAngleSigmaInRad
double getPitchAngleSigmaInRad() const
Definition: PositionWGS84.hpp:500
datatypes::PositionWGS84::setCourseAngleSigmaInDeg
void setCourseAngleSigmaInDeg(double val)
Sets the sigma of the normal distribution describing the confidence about the course angle.
Definition: PositionWGS84.hpp:318
datatypes::PositionWGS84::setCourseAngleInRad
void setCourseAngleInRad(double val)
Sets the course angle.
Definition: PositionWGS84.hpp:275
datatypes::PositionWGS84::m_altitudeMSL
double m_altitudeMSL
Definition: PositionWGS84.hpp:561
rad2deg
#define rad2deg
Definition: BasicDatatypes.hpp:40
datatypes::PositionWGS84::GPS_SBAS_Omnistar_HP
@ GPS_SBAS_Omnistar_HP
Definition: PositionWGS84.hpp:40
datatypes::PositionWGS84::distanceToPos
double distanceToPos(const PositionWGS84 &pos) const
Definition: PositionWGS84.cpp:34
datatypes::PositionWGS84::transformFromTangentialPlane
void transformFromTangentialPlane(double dX, double dY, const PositionWGS84 &origin)
Definition: PositionWGS84.cpp:322
datatypes::PositionWGS84::m_rollAngle
double m_rollAngle
Definition: PositionWGS84.hpp:569
datatypes::PositionWGS84::getTimestamp
const time_t & getTimestamp() const
Returns the time when the position measurement was taken.
Definition: PositionWGS84.hpp:372
datatypes::PositionWGS84::toString
std::string toString() const
Returns a std::string with a describtion of the WGS-84 position.
Definition: PositionWGS84.cpp:195
datatypes::PositionWGS84::m_courseAngle
double m_courseAngle
Definition: PositionWGS84.hpp:563
datatypes::PositionWGS84::IMU
@ IMU
Definition: PositionWGS84.hpp:44
datatypes::PositionWGS84::setLongitudeSigmaInMeter
void setLongitudeSigmaInMeter(double val)
Sets the sigma value of the normal distribution describing the confidence about the longitude measure...
Definition: PositionWGS84.hpp:236
datatypes::PositionWGS84::getMeasurementTime
const time_t & getMeasurementTime() const
Returns the time when the position measurement was taken.
Definition: PositionWGS84.hpp:363
UINT32
uint32_t UINT32
Definition: BasicDatatypes.hpp:26
datatypes::PositionWGS84::setPitchAngleSigmaInRad
void setPitchAngleSigmaInRad(double val)
Definition: PositionWGS84.hpp:329
datatypes::PositionWGS84::getCartesianRelPos
Point3D getCartesianRelPos(const PositionWGS84 &orign) const
Definition: PositionWGS84.cpp:400
datatypes::PositionWGS84::getRollAngleInRad
double getRollAngleInRad() const
Definition: PositionWGS84.hpp:503
datatypes::PositionWGS84::setRollAngleInRad
void setRollAngleInRad(double val)
Definition: PositionWGS84.hpp:332
datatypes::PositionWGS84::resetToDefault
void resetToDefault()
Resets all values of the position to their default values.
Definition: PositionWGS84.cpp:71
datatypes::PositionWGS84::setCourseAngleInDeg
void setCourseAngleInDeg(double val)
Sets the course angle.
Definition: PositionWGS84.hpp:292
datatypes::PositionWGS84::m_yawAngleSigma
double m_yawAngleSigma
Definition: PositionWGS84.hpp:566
datatypes::PositionWGS84::setRollAngleSigmaInDeg
void setRollAngleSigmaInDeg(double val)
Definition: PositionWGS84.hpp:336
datatypes::PositionWGS84::m_altitudeMSLSigma
double m_altitudeMSLSigma
Definition: PositionWGS84.hpp:562
datatypes::PositionWGS84::GPS_GBAS_RTK_Float
@ GPS_GBAS_RTK_Float
Definition: PositionWGS84.hpp:42
datatypes::PositionWGS84::setLatitudeSigmaInMeter
void setLatitudeSigmaInMeter(double val)
Sets the sigma value of the normal distribution describing the confidence about the latitude measurem...
Definition: PositionWGS84.hpp:154
datatypes::PositionWGS84::m_yawAngle
double m_yawAngle
Definition: PositionWGS84.hpp:565
datatypes
Definition: BasicDatatypes.hpp:91
datatypes::PositionWGS84::setLatitudeInDeg
void setLatitudeInDeg(double val)
Sets the latitude value of the WGS-84 position.
Definition: PositionWGS84.hpp:117
PI
#define PI
Definition: BasicDatatypes.hpp:34
datatypes::PositionWGS84::GPS_PPS
@ GPS_PPS
Definition: PositionWGS84.hpp:37


libsick_ldmrs
Author(s): SICK AG , Martin Günther , Jochen Sprickerhof
autogenerated on Wed Oct 26 2022 02:11:57