ReferenceEllipsoid.h
Go to the documentation of this file.
1 #ifndef _utl_ReferenceEllipsoid_h_
2 #define _utl_ReferenceEllipsoid_h_
3 
4 #include <string>
5 #include <map>
6 #include <boost/tuple/tuple.hpp>
7 #include <utl/CoordinateSystem.h>
8 #include <utl/AugerException.h>
9 
10 namespace utl {
11 
12  class Point;
13  class TransformationMatrix;
14 
15 
40 
41  public:
43  enum EllipsoidID { eWGS84 = 1 };
44 
46  typedef boost::tuple<double, double, double> Triple;
47 
49 
62  ReferenceEllipsoid(double theEquatorialRadius,
63  double theEccentricity2,
64  const CoordinateSystemPtr theECEF) :
65  fEquatorialRadius(theEquatorialRadius),
66  fEccentricity2(theEccentricity2),
67  fECEF(theECEF)
68  { }
69 
71  double GetEquatorialRadius() const { return fEquatorialRadius; }
73  double GetPolarRadius() const;
75  double GetEccentricity2() const { return fEccentricity2; }
77  double GetFlattening() const;
79  const CoordinateSystemPtr GetECEF() const { return fECEF; }
80 
82  bool
84  const
85  {
88  fECEF == r.fECEF;
89  }
90 
92  bool operator!=(const ReferenceEllipsoid& r) const
93  { return !operator==(r); }
94 
96  Triple PointToLatitudeLongitudeHeight(const Point& thePoint) const;
97 
99  Point LatitudeLongitudeHeightToPoint(double const latitude,
100  double const longitude,
101  double const height) const;
102 
104  Point LatitudeLongitudeHeightToPoint(const Triple& theGeodeticCoordinates) const;
105 
107  boost::tuple<TransformationMatrix, TransformationMatrix>
108  TransformECEFToLocalSystem(const Point& theOrigin) const;
109 
111  static const ReferenceEllipsoid& Get(const EllipsoidID theID);
112 
114  static const ReferenceEllipsoid& GetWGS84()
115  { return Get(eWGS84); }
116 
118  static void InitWithECEF(const CoordinateSystemPtr& theECEF);
119 
121  static EllipsoidID GetEllipsoidIDFromString(const std::string& str);
122 
127  class InvalidEllipsoidException;
128 
129  private:
130  // don't implement - doesn't make sense to have ellipsoid w/o paramters
132 
139 
140  typedef std::map<EllipsoidID, const ReferenceEllipsoid> Registry;
142 
143  static void RegisterOneEllipsoid(const EllipsoidID theID,
144  double theEquatorialRadius,
145  double theEccentricity,
146  const CoordinateSystemPtr& theECEF);
147 
148  double GetRn(const double phi) const;
149 
150  };
151 
152 
154 
155  public:
157  InvalidEllipsoidException(const std::string& message = std::string())
158  : AugerException(message) { }
159 
161  virtual std::string GetExceptionName() const
162  { return "Invalid Reference Ellipsoid requested exception"; }
163 
164  };
165 
166 }
167 
168 
169 #endif
170 
171 // Configure (x)emacs for this file ...
172 // Local Variables:
173 // mode: c++
174 // End:
Point object.
Definition: Point.h:32
double GetEccentricity2() const
Get eccentricity.
Base class for all exceptions used in the auger offline code.
bool operator==(const ReferenceEllipsoid &r) const
compare for equality
Point LatitudeLongitudeHeightToPoint(double const latitude, double const longitude, double const height) const
Convert Lat/Long/Height to Point.
double fEquatorialRadius
Radius at equator.
static const ReferenceEllipsoid & Get(const EllipsoidID theID)
Get known ellipsoid by registered ID.
bool operator!=(const ReferenceEllipsoid &r) const
compare for inequality
static void RegisterOneEllipsoid(const EllipsoidID theID, double theEquatorialRadius, double theEccentricity, const CoordinateSystemPtr &theECEF)
boost::tuple< TransformationMatrix, TransformationMatrix > TransformECEFToLocalSystem(const Point &theOrigin) const
Translation and rotation to go to local coordinate system.
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
static Registry * gfRegistry
boost::tuple< double, double, double > Triple
Coordinate triple for easy getting or setting of coordinates.
Definition: Triple.h:15
Reference ellipsoids for UTM transformations.
double GetEquatorialRadius() const
Get equatorial radius ( )
double GetFlattening() const
Get flattening.
Triple PointToLatitudeLongitudeHeight(const Point &thePoint) const
Convert Point to Lat/Long/Height.
static const ReferenceEllipsoid & GetWGS84()
Get the auger standard ellipsoid: wgs84.
Report request for non-existent ellipsoid.
boost::tuple< double, double, double > Triple
Coordinate triple.
double GetPolarRadius() const
Get Polar radius ( )
const CoordinateSystemPtr GetECEF() const
Get the ECEF.
CoordinateSystemPtr fECEF
Coordinate system to use as ECEF (Earth Centred Earth Fixed)
std::map< EllipsoidID, const ReferenceEllipsoid > Registry
ReferenceEllipsoid(double theEquatorialRadius, double theEccentricity2, const CoordinateSystemPtr theECEF)
Construct reference ellipsoid from equatorial radius, eccentricity, and coordinate system...
static void InitWithECEF(const CoordinateSystemPtr &theECEF)
Initialise the registry specifying the ECEF (instead of the Root CS)
EllipsoidID
ID&#39;s of known reference ellipsoid&#39;s.
double fEccentricity2
first eccentricity squared
static EllipsoidID GetEllipsoidIDFromString(const std::string &str)
Get EllipsoidID from string.
double GetRn(const double phi) const

, generated on Tue Sep 26 2023.