1 #ifndef _utl_ReferenceEllipsoid_h_
2 #define _utl_ReferenceEllipsoid_h_
6 #include <boost/tuple/tuple.hpp>
7 #include <utl/CoordinateSystem.h>
8 #include <utl/AugerException.h>
13 class TransformationMatrix;
46 typedef boost::tuple<double, double, double>
Triple;
63 double theEccentricity2,
100 double const longitude,
101 double const height)
const;
107 boost::tuple<TransformationMatrix, TransformationMatrix>
127 class InvalidEllipsoidException;
140 typedef std::map<EllipsoidID, const ReferenceEllipsoid>
Registry;
144 double theEquatorialRadius,
145 double theEccentricity,
148 double GetRn(
const double phi)
const;
161 virtual std::string GetExceptionName()
const
162 {
return "Invalid Reference Ellipsoid requested exception"; }
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.
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's of known reference ellipsoid's.
double fEccentricity2
first eccentricity squared
static EllipsoidID GetEllipsoidIDFromString(const std::string &str)
Get EllipsoidID from string.
double GetRn(const double phi) const