UNCLASSIFIED

GeographicTranslator
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
AzimuthalEquidistant.h
Go to the documentation of this file.
1 // CLASSIFICATION: UNCLASSIFIED
2 
3 #ifndef AzimuthalEquidistant_H
4 #define AzimuthalEquidistant_H
5 
6 /***************************************************************************/
7 /* RSC IDENTIFIER: AZIMUTHAL EQUIDISTANT
8  *
9  * ABSTRACT
10  *
11  * This component provides conversions between Geodetic coordinates
12  * (latitude and longitude in radians) and Azimuthal Equidistant
13  * projection coordinates (easting and northing in meters). This projection
14  * employs a spherical Earth model. The spherical radius used is the radius of
15  * the sphere having the same area as the ellipsoid.
16  *
17  * ERROR HANDLING
18  *
19  * This component checks parameters for valid values. If an invalid value
20  * is found the error code is combined with the current error code using
21  * the bitwise or. This combining allows multiple error codes to be
22  * returned. The possible error codes are:
23  *
24  * AZEQ_NO_ERROR : No errors occurred in function
25  * AZEQ_LAT_ERROR : Latitude outside of valid range
26  * (-90 to 90 degrees)
27  * AZEQ_LON_ERROR : Longitude outside of valid range
28  * (-180 to 360 degrees)
29  * AZEQ_EASTING_ERROR : Easting outside of valid range
30  * (depends on ellipsoid and projection
31  * parameters)
32  * AZEQ_NORTHING_ERROR : Northing outside of valid range
33  * (depends on ellipsoid and projection
34  * parameters)
35  * AZEQ_ORIGIN_LAT_ERROR : Origin latitude outside of valid range
36  * (-90 to 90 degrees)
37  * AZEQ_CENT_MER_ERROR : Central meridian outside of valid range
38  * (-180 to 360 degrees)
39  * AZEQ_A_ERROR : Semi-major axis less than or equal to zero
40  * AZEQ_INV_F_ERROR : Inverse flattening outside of valid range
41  * (250 to 350)
42  * AZEQ_PROJECTION_ERROR : Point is plotted as a circle of radius PI * Ra
43  *
44  *
45  * REUSE NOTES
46  *
47  * AZIMUTHAL EQUIDISTANT is intended for reuse by any application that
48  * performs an Azimuthal Equidistant projection or its inverse.
49  *
50  * REFERENCES
51  *
52  * Further information on AZIMUTHAL EQUIDISTANT can be found in the Reuse Manual.
53  *
54  * AZIMUTHAL EQUIDISTANT originated from: U.S. Army Topographic Engineering Center
55  * Geospatial Information Division
56  * 7701 Telegraph Road
57  * Alexandria, VA 22310-3864
58  *
59  * LICENSES
60  *
61  * None apply to this component.
62  *
63  * RESTRICTIONS
64  *
65  * AZIMUTHAL EQUIDISTANT has no restrictions.
66  *
67  * ENVIRONMENT
68  *
69  * AZIMUTHAL EQUIDISTANT was tested and certified in the following environments:
70  *
71  * 1. Solaris 2.5 with GCC, version 2.8.1
72  * 2. MSDOS with MS Visual C++, version 6
73  *
74  * MODIFICATIONS
75  *
76  * Date Description
77  * ---- -----------
78  * 05-19-00 Original Code
79  * 03-08-07 Original C++ Code
80  *
81  *
82  */
83 
84 
85 #include "CoordinateSystem.h"
86 
87 
88 namespace MSP
89 {
90  namespace CCS
91  {
92  class MapProjection4Parameters;
93  class MapProjectionCoordinates;
94  class GeodeticCoordinates;
95 
96 
97  /***************************************************************************/
98  /*
99  * DEFINES
100  */
101 
103  {
104  public:
105 
106  /*
107  * The constructor receives the ellipsoid parameters and
108  * projection parameters as inputs, and sets the corresponding state
109  * variables. If any errors occur, an exception is thrown with a description
110  * of the error.
111  *
112  * ellipsoidSemiMajorAxis : Semi-major axis of ellipsoid, in meters (input)
113  * ellipsoidFlattening : Flattening of ellipsoid (input)
114  * centralMeridian : Longitude in radians at the center of (input)
115  * the projection
116  * originLatitude : Latitude in radians at which the (input)
117  * point scale factor is 1.0
118  * falseEasting : A coordinate value in meters assigned to the
119  * central meridian of the projection. (input)
120  * falseNorthing : A coordinate value in meters assigned to the
121  * origin latitude of the projection (input)
122  */
123 
124  AzimuthalEquidistant( double ellipsoidSemiMajorAxis, double ellipsoidFlattening, double centralMeridian, double originLatitude, double falseEasting, double falseNorthing );
125 
126 
128 
129 
130  ~AzimuthalEquidistant( void );
131 
132 
134 
135 
136  /*
137  * The function getParameters returns the current ellipsoid
138  * parameters and Azimuthal Equidistant projection parameters.
139  *
140  * ellipsoidSemiMajorAxis : Semi-major axis of ellipsoid, in meters (output)
141  * ellipsoidFlattening : Flattening of ellipsoid (output)
142  * centralMeridian : Longitude in radians at the center of (output)
143  * the projection
144  * originLatitude : Latitude in radians at which the (output)
145  * point scale factor is 1.0
146  * falseEasting : A coordinate value in meters assigned to the
147  * central meridian of the projection. (output)
148  * falseNorthing : A coordinate value in meters assigned to the
149  * origin latitude of the projection (output)
150  */
151 
153 
154 
155  /*
156  * The function convertFromGeodetic converts geodetic (latitude and
157  * longitude) coordinates to Azimuthal Equidistant projection (easting and northing)
158  * coordinates, according to the current ellipsoid and Azimuthal Equidistant projection
159  * parameters. If any errors occur, an exception is thrown with a description
160  * of the error.
161  *
162  * longitude : Longitude (lambda) in radians (input)
163  * latitude : Latitude (phi) in radians (input)
164  * easting : Easting (X) in meters (output)
165  * northing : Northing (Y) in meters (output)
166  */
167 
169 
170 
171  /*
172  * The function convertToGeodetic converts Azimuthal_Equidistant projection
173  * (easting and northing) coordinates to geodetic (latitude and longitude)
174  * coordinates, according to the current ellipsoid and Azimuthal_Equidistant projection
175  * coordinates. If any errors occur, an exception is thrown with a description
176  * of the error.
177  *
178  * easting : Easting (X) in meters (input)
179  * northing : Northing (Y) in meters (input)
180  * longitude : Longitude (lambda) in radians (output)
181  * latitude : Latitude (phi) in radians (output)
182  */
183 
185 
186  private:
187 
188  /* Ellipsoid Parameters, default to WGS 84 */
189  double Ra; /* Spherical Radius */
190  double Sin_Azeq_Origin_Lat;
191  double Cos_Azeq_Origin_Lat;
192 
193  /* Azimuthal Equidistant projection Parameters */
194  double Azeq_Origin_Lat; /* Latitude of origin in radians */
195  double Azeq_Origin_Long; /* Longitude of origin in radians */
196  double Azeq_False_Northing; /* False northing in meters */
197  double Azeq_False_Easting; /* False easting in meters */
198  double abs_Azeq_Origin_Lat;
199 
200  double Azeq_Delta_Northing;
201  double Azeq_Delta_Easting;
202 
203  };
204  }
205 }
206 
207 #endif
208 
209 
210 // CLASSIFICATION: UNCLASSIFIED