Autonomy Software C++ 24.5.1
Welcome to the Autonomy Software repository of the Mars Rover Design Team (MRDT) at Missouri University of Science and Technology (Missouri S&T)! API reference contains the source code and other resources for the development of the autonomy software for our Mars rover. The Autonomy Software project aims to compete in the University Rover Challenge (URC) by demonstrating advanced autonomous capabilities and robust navigation algorithms.
Loading...
Searching...
No Matches
GeospatialOperations.hpp
Go to the documentation of this file.
1
12#ifndef GEOSPATIAL_OPERATIONS_HPP
13#define GEOSPATIAL_OPERATIONS_HPP
14
15#include "../AutonomyLogging.h"
16
18#include <GeographicLib/Geodesic.hpp>
19#include <GeographicLib/UTMUPS.hpp>
20#include <chrono>
21
23
24
32namespace geoops
33{
35 // Declare public enums.
37
38 // This enum is used to store values for the waypoint type.
39 enum class WaypointType
40 {
41 eNavigationWaypoint,
42 eTagWaypoint,
43 eMalletWaypoint,
44 eWaterBottleWaypoint,
45 eObjectWaypoint, // Used to represent either Mallet or WaterBottle waypoint.
46 eObstacleWaypoint,
47 eUNKNOWN
48 };
49
50 // This enum is used to store the location fix type for a UTM or GPS points, the enum indexes follow the UBLOX-F9P docs.
51 enum class PositionFixType
52 {
53 eNoFix,
54 eDeadReckoning,
55 eFix2D,
56 eFix3D,
57 eGNSSDeadReckoningCombined,
58 eTimeOnly,
59 eUNKNOWN
60 };
61
63 // Declare public variables.
65
67 // Declare public structs that are specific to and used within this class.
69
70
82 {
83 public:
84 // Define public struct attributes.
85 double dDistanceMeters; // The great circle distance between the two points.
86 double dArcLengthDegrees; // The degree measurement difference between the two points from the center of the sphere. (0, 180)
87 double dStartRelativeBearing; // The relative bearing in degrees from the first point to the second point for the shortest great circle path. (0, 360)
88 double dEndRelativeBearing; // The relative bearing in degrees from the second point to the first point for the shortest great circle path. (0, 360)
89 };
90
91
98 struct IMUData
99 {
100 public:
101 // Declare struct public member variables.
102 double dPitch;
103 double dRoll;
104 double dHeading;
105
106
114 {
115 // Initialize member variables to default values.
116 dPitch = 0.0;
117 dRoll = 0.0;
118 dHeading = 0.0;
119 }
120
121
131 IMUData(double dPitch, double dRoll, double dHeading)
132 {
133 // Initialize member variables with given values.
134 this->dPitch = dPitch;
135 this->dRoll = dRoll;
136 this->dHeading = dHeading;
137 }
138 };
139
140
148 {
149 public:
150 // Declare struct public attributes
151 double dLatitude; // The geographic latitude in degrees, typically within the range [-90, 90].
152 double dLongitude; // The geographic longitude in degrees, typically within the range [-180, 180].
153 double dAltitude; // The elevation above sea level in meters.
154 double d2DAccuracy; // The horizontal accuracy of the GPS coordinates in meters.
155 double d3DAccuracy; // The three-dimensional accuracy, including altitude, in meters.
156 double dMeridianConvergence; // The angle between true north and grid north at the given location in degrees. Positive in eastern direction.
157 double dScale; // The scale factor applied to the UTM coordinates for map projection.
158 PositionFixType eCoordinateAccuracyFixType; // The type of satellite location lock the coordinate was taken under.
159 bool bIsDifferential; // Whether of not the coordinate was taken under a differential GPS lock.
160 std::chrono::system_clock::time_point tmTimestamp; // The chrono time point when the GPS coordinate was created/received.
161
163 // Declare public methods.
165
181 GPSCoordinate(double dLatitude = 0.0,
182 double dLongitude = 0.0,
183 double dAltitude = 0.0,
184 double d2DAccuracy = -1.0,
185 double d3DAccuracy = -1.0,
186 double dMeridianConvergence = -1.0,
187 double dScale = 0.0,
188 PositionFixType eCoordinateAccuracyFixType = PositionFixType::eUNKNOWN,
189 bool bIsDifferential = false,
190 std::chrono::system_clock::time_point tmTimestamp = std::chrono::system_clock::time_point().min())
191 {
192 // Initialize member variables with given values.
193 this->dLatitude = dLatitude;
194 this->dLongitude = dLongitude;
195 this->dAltitude = dAltitude;
196 this->d2DAccuracy = d2DAccuracy;
197 this->d3DAccuracy = d3DAccuracy;
198 this->dMeridianConvergence = dMeridianConvergence;
199 this->dScale = dScale;
200 this->eCoordinateAccuracyFixType = eCoordinateAccuracyFixType;
201 this->bIsDifferential = bIsDifferential;
202 this->tmTimestamp = tmTimestamp;
203 }
204
205
215 bool operator==(const GPSCoordinate& stOtherCoordinate) const
216 {
217 // Check if location, altitude, and accuracy are the same. Not going to worry about other values for now.
218 return (dLatitude == stOtherCoordinate.dLatitude && dLongitude == stOtherCoordinate.dLongitude && dAltitude == stOtherCoordinate.dAltitude &&
219 d2DAccuracy == stOtherCoordinate.d2DAccuracy && d3DAccuracy == stOtherCoordinate.d3DAccuracy &&
220 eCoordinateAccuracyFixType == stOtherCoordinate.eCoordinateAccuracyFixType && bIsDifferential == stOtherCoordinate.bIsDifferential);
221 }
222
223
233 bool operator!=(const GPSCoordinate& stOtherCoordinate) const { return !this->operator==(stOtherCoordinate); }
234 };
235
236
244 {
245 public:
246 // Declare struct public attributes.
247 double dEasting; // The eastward displacement from the UTM zone's central meridian in meters.
248 double dNorthing; // The northward displacement from the equator in meters.
249 int nZone; // The UTM zone number identifying the region on the Earth's surface.
250 bool bWithinNorthernHemisphere; // Indicates whether the coordinate is located in the northern hemisphere.
251 double dAltitude; // The elevation above sea level in meters.
252 double d2DAccuracy; // The horizontal accuracy of the UTM coordinates in meters.
253 double d3DAccuracy; // The three-dimensional accuracy, including altitude, in meters.
254 double dMeridianConvergence; // The angle between true north and grid north at the given location in degrees. Positive in eastern direction.
255 double dScale; // The scale factor applied to the UTM coordinates for map projection.
256 PositionFixType eCoordinateAccuracyFixType; // The type of satellite location lock the coordinate was taken under.
257 bool bIsDifferential; // Whether of not the coordinate was taken under a differential GPS lock.
258 std::chrono::system_clock::time_point tmTimestamp; // The chrono time point when the GPS coordinate was created/received.
259
261 // Declare public methods.
263
264
282 UTMCoordinate(double dEasting = 0.0,
283 double dNorthing = 0.0,
284 int nZone = 0,
285 bool bWithinNorthernHemisphere = true,
286 double dAltitude = 0.0,
287 double d2DAccuracy = -1.0,
288 double d3DAccuracy = -1.0,
289 double dMeridianConvergence = -1.0,
290 double dScale = 0.0,
291 PositionFixType eCoordinateAccuracyFixType = PositionFixType::eUNKNOWN,
292 bool bIsDifferential = false,
293 std::chrono::system_clock::time_point tmTimestamp = std::chrono::system_clock::time_point().min())
294 {
295 // Initialize member variables with given values.
296 this->dEasting = dEasting;
297 this->dNorthing = dNorthing;
298 this->nZone = nZone;
299 this->bWithinNorthernHemisphere = bWithinNorthernHemisphere;
300 this->dAltitude = dAltitude;
301 this->d2DAccuracy = d2DAccuracy;
302 this->d3DAccuracy = d3DAccuracy;
303 this->dMeridianConvergence = dMeridianConvergence;
304 this->dScale = dScale;
305 this->eCoordinateAccuracyFixType = eCoordinateAccuracyFixType;
306 this->bIsDifferential = bIsDifferential;
307 this->tmTimestamp = tmTimestamp;
308 }
309
310
320 bool operator==(const UTMCoordinate& stOtherCoordinate) const
321 {
322 // Check if location, altitude, and accuracy are the same. Not going to worry about other values for now.
323 return (dEasting == stOtherCoordinate.dEasting && dNorthing == stOtherCoordinate.dNorthing && nZone == stOtherCoordinate.nZone &&
324 bWithinNorthernHemisphere == stOtherCoordinate.bWithinNorthernHemisphere && dAltitude == stOtherCoordinate.dAltitude &&
325 d2DAccuracy == stOtherCoordinate.d2DAccuracy && d3DAccuracy == stOtherCoordinate.d3DAccuracy &&
326 eCoordinateAccuracyFixType == stOtherCoordinate.eCoordinateAccuracyFixType && bIsDifferential == stOtherCoordinate.bIsDifferential);
327 }
328
329
339 bool operator!=(const UTMCoordinate& stOtherCoordinate) const { return !this->operator==(stOtherCoordinate); }
340 };
341
342
352 {
353 // Create instance variables.
354 UTMCoordinate stConvertCoord;
355
356 // Get data out of the GPS coord and repackage it into the UTM struct.
357 stConvertCoord.d2DAccuracy = stGPSCoord.d2DAccuracy;
358 stConvertCoord.d3DAccuracy = stGPSCoord.d3DAccuracy;
359 stConvertCoord.dAltitude = stGPSCoord.dAltitude;
360 stConvertCoord.eCoordinateAccuracyFixType = stGPSCoord.eCoordinateAccuracyFixType;
361 stConvertCoord.bIsDifferential = stGPSCoord.bIsDifferential;
362 stConvertCoord.tmTimestamp = stGPSCoord.tmTimestamp;
363
364 // Catch errors from GeographicLib.
365 try
366 {
367 // Forward solve for the UTM coord.
368 GeographicLib::UTMUPS::Forward(stGPSCoord.dLatitude,
369 stGPSCoord.dLongitude,
370 stConvertCoord.nZone,
371 stConvertCoord.bWithinNorthernHemisphere,
372 stConvertCoord.dEasting,
373 stConvertCoord.dNorthing,
374 stConvertCoord.dMeridianConvergence,
375 stConvertCoord.dScale);
376 }
377 catch (const GeographicLib::GeographicErr::exception& geError)
378 {
379 // Submit logger message.
380 LOG_ERROR(logging::g_qSharedLogger, "Unable to forward solve a GPSCoordinate to UTMCoordinate. GeographicLib error is: {}", geError.what());
381 }
382
383 // Return the converted UTM coordinate.
384 return stConvertCoord;
385 }
386
387
397 {
398 // Create instance variables.
399 GPSCoordinate stConvertCoord;
400
401 // Get data out of the UTM coord and repackage it into the GPS struct.
402 stConvertCoord.d2DAccuracy = stUTMCoord.d2DAccuracy;
403 stConvertCoord.d3DAccuracy = stUTMCoord.d3DAccuracy;
404 stConvertCoord.dAltitude = stUTMCoord.dAltitude;
405 stConvertCoord.eCoordinateAccuracyFixType = stUTMCoord.eCoordinateAccuracyFixType;
406 stConvertCoord.bIsDifferential = stUTMCoord.bIsDifferential;
407 stConvertCoord.tmTimestamp = stUTMCoord.tmTimestamp;
408
409 // Catch errors from GeographicLib.
410 try
411 {
412 // Reverse solve for the UTM coord.
413 GeographicLib::UTMUPS::Reverse(stUTMCoord.nZone,
414 stUTMCoord.bWithinNorthernHemisphere,
415 std::fabs(stUTMCoord.dEasting),
416 stUTMCoord.dNorthing,
417 stConvertCoord.dLatitude,
418 stConvertCoord.dLongitude,
419 stConvertCoord.dMeridianConvergence,
420 stConvertCoord.dScale);
421 }
422 catch (const GeographicLib::GeographicErr::exception& geError)
423 {
424 // Submit logger message.
425 LOG_ERROR(logging::g_qSharedLogger, "Unable to reverse solve a UTMCoordinate to GPSCoordinate. GeographicLib error is: {}", geError.what());
426 }
427
428 // Return the converted UTM coordinate.
429 return stConvertCoord;
430 }
431
432
445 inline GeoMeasurement CalculateGeoMeasurement(const GPSCoordinate& stCoord1, const GPSCoordinate& stCoord2)
446 {
447 // Create instance variables.
448 GeoMeasurement stMeasurements;
449
450 // Construct a geodesic with earth characteristics. (Radius and flattening)
451 // The WGS84 standard is widely used and aligns with Google Maps.
452 GeographicLib::Geodesic geGeodesic = GeographicLib::Geodesic::WGS84();
453
454 // Solve the inverse geodesic for distance and arc length degrees at the center of the globe, and relative bearings.
455 stMeasurements.dArcLengthDegrees = geGeodesic.Inverse(stCoord1.dLatitude,
456 stCoord1.dLongitude,
457 stCoord2.dLatitude,
458 stCoord2.dLongitude,
459 stMeasurements.dDistanceMeters,
460 stMeasurements.dStartRelativeBearing,
461 stMeasurements.dEndRelativeBearing);
462
463 // NOTE: Regarding azi1 vs azi2, azi1 is the direction measured at point 1 (your navigation aid) to point 2. azi2 is the direction measured at point 2 (your
464 // location) away from point 1. (If you want the direction to point 1, add ±180° to azi2.)
465 // Map the -180, 180 range of the azimuths to 0, 360, with both points zeroed at North.
466 stMeasurements.dStartRelativeBearing = std::fmod((stMeasurements.dStartRelativeBearing + 360), 360);
467 stMeasurements.dEndRelativeBearing = std::fmod((stMeasurements.dEndRelativeBearing + 180), 360);
468 // Ensure the result angle is positive.
469 if (stMeasurements.dStartRelativeBearing < 0)
470 {
471 // Add 360 degrees.
472 stMeasurements.dStartRelativeBearing += 360;
473 }
474 // Ensure the result angle is positive.
475 if (stMeasurements.dEndRelativeBearing < 0)
476 {
477 // Add 360 degrees.
478 stMeasurements.dEndRelativeBearing += 360;
479 }
480
481 // Return result distance.
482 return stMeasurements;
483 }
484
485
498 inline GeoMeasurement CalculateGeoMeasurement(const UTMCoordinate& stCoord1, const UTMCoordinate& stCoord2)
499 {
500 // Create instance variables.
501 GeoMeasurement stMeasurements;
502
503 // Construct a geodesic with earth characteristics. (Radius and flattening)
504 // The WGS84 standard is widely used and aligns with Google Maps.
505 GeographicLib::Geodesic geGeodesic = GeographicLib::Geodesic::WGS84();
506
507 // Convert the given UTM coords into GPS coords for temporary use.
508 GPSCoordinate stGPSCoord1 = ConvertUTMToGPS(stCoord1);
509 GPSCoordinate stGPSCoord2 = ConvertUTMToGPS(stCoord2);
510
511 // Solve the inverse geodesic.
512 stMeasurements.dArcLengthDegrees = geGeodesic.Inverse(stGPSCoord1.dLatitude,
513 stGPSCoord1.dLongitude,
514 stGPSCoord2.dLatitude,
515 stGPSCoord2.dLongitude,
516 stMeasurements.dDistanceMeters,
517 stMeasurements.dStartRelativeBearing,
518 stMeasurements.dEndRelativeBearing);
519
520 // NOTE: Regarding azi1 vs azi2, azi1 is the direction measured at point 1 (your navigation aid) to point 2. azi2 is the direction measured at point 2 (your
521 // location) away from point 1. (If you want the direction to point 1, add ±180° to azi2.)
522 // Map the -180, 180 range of the azimuths to 0, 360, with both points zeroed at North.
523 stMeasurements.dStartRelativeBearing = std::fmod((stMeasurements.dStartRelativeBearing + 360), 360);
524 stMeasurements.dEndRelativeBearing = std::fmod((stMeasurements.dEndRelativeBearing + 180), 360);
525 // Ensure the result angle is positive.
526 if (stMeasurements.dStartRelativeBearing < 0)
527 {
528 // Add 360 degrees.
529 stMeasurements.dStartRelativeBearing += 360;
530 }
531 // Ensure the result angle is positive.
532 if (stMeasurements.dEndRelativeBearing < 0)
533 {
534 // Add 360 degrees.
535 stMeasurements.dEndRelativeBearing += 360;
536 }
537
538 // Return result distance.
539 return stMeasurements;
540 }
541
542
550 struct Waypoint
551 {
552 private:
553 // Declare struct private member variables.
554 geoops::GPSCoordinate stGPSLocation; // This is not meant to be changed once this waypoint is created.
555 geoops::UTMCoordinate stUTMLocation; // This is not meant to be changed once this waypoint is created.
556
557 public:
558 // Declare struct public member variables.
559 WaypointType eType;
560 double dRadius;
561 int nID;
562
563
578 const WaypointType& eType = WaypointType::eUNKNOWN,
579 const double dRadius = 0.0,
580 const int nID = -1)
581 {
582 // Initialize member variables.
583 this->stGPSLocation = stGPSLocation;
584 this->stUTMLocation = geoops::ConvertGPSToUTM(stGPSLocation);
585 this->eType = eType;
586 this->dRadius = dRadius;
587 this->nID = nID;
588 }
589
590
604 Waypoint(const geoops::UTMCoordinate& stUTMLocation, const WaypointType& eType = WaypointType::eUNKNOWN, const double dRadius = 0.0, const int nID = -1)
605 {
606 // Initialize member variables.
607 this->stUTMLocation = stUTMLocation;
608 this->stGPSLocation = geoops::ConvertUTMToGPS(stUTMLocation);
609 this->eType = eType;
610 this->dRadius = dRadius;
611 this->nID = nID;
612 }
613
614
623 const geoops::GPSCoordinate& GetGPSCoordinate() const { return stGPSLocation; }
624
625
634 const geoops::UTMCoordinate& GetUTMCoordinate() const { return stUTMLocation; }
635
636
646 bool operator==(const Waypoint& stOtherWaypoint) const
647 {
648 // Check if location, altitude, and accuracy are the same. Not going to worry about other values for now.
649 return (stGPSLocation == stOtherWaypoint.stGPSLocation && stUTMLocation == stOtherWaypoint.stUTMLocation && eType == stOtherWaypoint.eType &&
650 dRadius == stOtherWaypoint.dRadius && nID == stOtherWaypoint.nID);
651 }
652
653
663 bool operator!=(const Waypoint& stOtherWaypoint) const { return !this->operator==(stOtherWaypoint); }
664 };
665
666
674 {
675 private:
676 // Declare struct private member variables.
677 Waypoint stRoverPosition; // Stores the rover's 3D location in UTM and GPS form.
678 double dRoverHeading; // Stores the rover's compass heading. North = 0, CW=pos
679
680 public:
681
690 RoverPose(const geoops::GPSCoordinate& stRoverPosition = geoops::GPSCoordinate(), const double dRoverHeading = 0.0)
691 {
692 // Update member variables.
693 this->stRoverPosition = Waypoint(stRoverPosition);
694 this->dRoverHeading = dRoverHeading;
695 }
696
697
706 RoverPose(const geoops::UTMCoordinate& stRoverPosition, const double dRoverHeading = 0.0)
707 {
708 // Update member variables.
709 this->stRoverPosition = Waypoint(stRoverPosition);
710 this->dRoverHeading = dRoverHeading;
711 }
712
713
722 const geoops::GPSCoordinate& GetGPSCoordinate() const { return stRoverPosition.GetGPSCoordinate(); }
723
724
733 const geoops::UTMCoordinate& GetUTMCoordinate() const { return stRoverPosition.GetUTMCoordinate(); }
734
735
743 double GetCompassHeading() const { return dRoverHeading; }
744
745
755 bool operator==(const RoverPose& stOtherRoverPose) const
756 {
757 // Check if location, altitude, and accuracy are the same. Not going to worry about other values for now.
758 return (stRoverPosition == stOtherRoverPose.GetGPSCoordinate() && stRoverPosition == stOtherRoverPose.GetUTMCoordinate() &&
759 dRoverHeading == stOtherRoverPose.dRoverHeading);
760 }
761
762
772 bool operator!=(const RoverPose& stOtherRoverPose) const { return !this->operator==(stOtherRoverPose); }
773 };
774} // namespace geoops
775#endif
static softfloat min()
Namespace containing functions related to operations on global position number systems and other data...
Definition GeospatialOperations.hpp:33
GPSCoordinate ConvertUTMToGPS(const UTMCoordinate &stUTMCoord)
Given a UTM coordinate, convert to GPS and create a new GPSCoordinate object.
Definition GeospatialOperations.hpp:396
UTMCoordinate ConvertGPSToUTM(const GPSCoordinate &stGPSCoord)
Given a GPS coordinate, convert to UTM and create a new UTMCoordinate object.
Definition GeospatialOperations.hpp:351
GeoMeasurement CalculateGeoMeasurement(const GPSCoordinate &stCoord1, const GPSCoordinate &stCoord2)
The shortest path between two points on an ellipsoid at (lat1, lon1) and (lat2, lon2) is called the g...
Definition GeospatialOperations.hpp:445
This struct stores/contains information about a GPS data.
Definition GeospatialOperations.hpp:148
GPSCoordinate(double dLatitude=0.0, double dLongitude=0.0, double dAltitude=0.0, double d2DAccuracy=-1.0, double d3DAccuracy=-1.0, double dMeridianConvergence=-1.0, double dScale=0.0, PositionFixType eCoordinateAccuracyFixType=PositionFixType::eUNKNOWN, bool bIsDifferential=false, std::chrono::system_clock::time_point tmTimestamp=std::chrono::system_clock::time_point().min())
Construct a new GPSCoordinate object.
Definition GeospatialOperations.hpp:181
bool operator!=(const GPSCoordinate &stOtherCoordinate) const
Overridden operator not equals for GPSCoordinate struct.
Definition GeospatialOperations.hpp:233
bool operator==(const GPSCoordinate &stOtherCoordinate) const
Overridden operator equals for GPSCoordinate struct.
Definition GeospatialOperations.hpp:215
This struct is used to store the distance, arc length, and relative bearing for a calculated geodesic...
Definition GeospatialOperations.hpp:82
This struct stores/contains information about orientation.
Definition GeospatialOperations.hpp:99
IMUData()
Construct a new IMUData object.
Definition GeospatialOperations.hpp:113
IMUData(double dPitch, double dRoll, double dHeading)
Construct a new IMUData object.
Definition GeospatialOperations.hpp:131
This struct is used by the WaypointHandler to provide an easy way to store all pose data about the ro...
Definition GeospatialOperations.hpp:674
RoverPose(const geoops::GPSCoordinate &stRoverPosition=geoops::GPSCoordinate(), const double dRoverHeading=0.0)
Construct a new Rover Pose object.
Definition GeospatialOperations.hpp:690
bool operator==(const RoverPose &stOtherRoverPose) const
Overridden operator equals for RoverPose struct.
Definition GeospatialOperations.hpp:755
const geoops::GPSCoordinate & GetGPSCoordinate() const
Accessor for the geoops::GPSCoordinate member variable.
Definition GeospatialOperations.hpp:722
bool operator!=(const RoverPose &stOtherRoverPose) const
Overridden operator equals for RoverPose struct.
Definition GeospatialOperations.hpp:772
double GetCompassHeading() const
Accessor for the Compass Heading private member.
Definition GeospatialOperations.hpp:743
const geoops::UTMCoordinate & GetUTMCoordinate() const
Accessor for the geoops::UTMCoordinate member variable.
Definition GeospatialOperations.hpp:733
RoverPose(const geoops::UTMCoordinate &stRoverPosition, const double dRoverHeading=0.0)
Construct a new Rover Pose object.
Definition GeospatialOperations.hpp:706
This struct stores/contains information about a UTM coordinate.
Definition GeospatialOperations.hpp:244
UTMCoordinate(double dEasting=0.0, double dNorthing=0.0, int nZone=0, bool bWithinNorthernHemisphere=true, double dAltitude=0.0, double d2DAccuracy=-1.0, double d3DAccuracy=-1.0, double dMeridianConvergence=-1.0, double dScale=0.0, PositionFixType eCoordinateAccuracyFixType=PositionFixType::eUNKNOWN, bool bIsDifferential=false, std::chrono::system_clock::time_point tmTimestamp=std::chrono::system_clock::time_point().min())
Construct a new UTMCoordinate object.
Definition GeospatialOperations.hpp:282
bool operator==(const UTMCoordinate &stOtherCoordinate) const
Overridden operator equals for UTMCoordinate struct.
Definition GeospatialOperations.hpp:320
bool operator!=(const UTMCoordinate &stOtherCoordinate) const
Overridden operator not equals for UTMCoordinate struct.
Definition GeospatialOperations.hpp:339
This struct is used by the WaypointHandler class to store location, size, and type information about ...
Definition GeospatialOperations.hpp:551
const geoops::GPSCoordinate & GetGPSCoordinate() const
Accessor for the geoops::GPSCoordinate member variable.
Definition GeospatialOperations.hpp:623
bool operator==(const Waypoint &stOtherWaypoint) const
Overridden operator equals for Waypoint struct.
Definition GeospatialOperations.hpp:646
Waypoint(const geoops::GPSCoordinate &stGPSLocation=geoops::GPSCoordinate(), const WaypointType &eType=WaypointType::eUNKNOWN, const double dRadius=0.0, const int nID=-1)
Construct a new Waypoint object.
Definition GeospatialOperations.hpp:577
bool operator!=(const Waypoint &stOtherWaypoint) const
Overridden operator equals for Waypoint struct.
Definition GeospatialOperations.hpp:663
Waypoint(const geoops::UTMCoordinate &stUTMLocation, const WaypointType &eType=WaypointType::eUNKNOWN, const double dRadius=0.0, const int nID=-1)
Construct a new Waypoint object.
Definition GeospatialOperations.hpp:604
const geoops::UTMCoordinate & GetUTMCoordinate() const
Accessor for the geoops::UTMCoordinate member variable.
Definition GeospatialOperations.hpp:634