UNCLASSIFIED

GeographicTranslator
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
TransverseCylindricalEqualArea.h
Go to the documentation of this file.
1 // CLASSIFICATION: UNCLASSIFIED
2 
3 #ifndef TransverseCylindricalEqualArea_H
4 #define TransverseCylindricalEqualArea_H
5 
6 /***************************************************************************/
7 /* RSC IDENTIFIER: TRANSVERSE CYLINDRICAL EQUAL AREA
8  *
9  * ABSTRACT
10  *
11  * This component provides conversions between Geodetic coordinates
12  * (latitude and longitude in radians) and Transverse Cylindrical Equal Area
13  * projection coordinates (easting and northing in meters).
14  *
15  * ERROR HANDLING
16  *
17  * This component checks parameters for valid values. If an invalid value
18  * is found, the error code is combined with the current error code using
19  * the bitwise or. This combining allows multiple error codes to be
20  * returned. The possible error codes are:
21  *
22  * TCEA_NO_ERROR : No errors occurred in function
23  * TCEA_LAT_ERROR : Latitude outside of valid range
24  * (-90 to 90 degrees)
25  * TCEA_LON_ERROR : Longitude outside of valid range
26  * (-180 to 360 degrees)
27  * TCEA_EASTING_ERROR : Easting outside of valid range
28  * (False_Easting +/- ~6,500,000 m,
29  * depending on ellipsoid parameters
30  * and Origin_Latitude)
31  * TCEA_NORTHING_ERROR : Northing outside of valid range
32  * (False_Northing +/- ~20,000,000 m,
33  * depending on ellipsoid parameters
34  * and Origin_Latitude)
35  * TCEA_ORIGIN_LAT_ERROR : Origin latitude outside of valid range
36  * (-90 to 90 degrees)
37  * TCEA_CENT_MER_ERROR : Central meridian outside of valid range
38  * (-180 to 360 degrees)
39  * TCEA_A_ERROR : Semi-major axis less than or equal to zero
40  * TCEA_INV_F_ERROR : Inverse flattening outside of valid range
41  * (250 to 350)
42  * TCEA_SCALE_FACTOR_ERROR : Scale factor outside of valid
43  * range (0.3 to 3.0)
44  * TCEA_LON_WARNING : Distortion will result if longitude is more
45  * than 90 degrees from the Central Meridian
46  *
47  * REUSE NOTES
48  *
49  * TRANSVERSE CYLINDRICAL EQUAL AREA is intended for reuse by any application that
50  * performs a Transverse Cylindrical Equal Area projection or its inverse.
51  *
52  * REFERENCES
53  *
54  * Further information on TRANSVERSE CYLINDRICAL EQUAL AREA can be found in the Reuse Manual.
55  *
56  * TRANSVERSE CYLINDRICAL EQUAL AREA originated from :
57  * U.S. Army Topographic Engineering Center
58  * Geospatial Information Division
59  * 7701 Telegraph Road
60  * Alexandria, VA 22310-3864
61  *
62  * LICENSES
63  *
64  * None apply to this component.
65  *
66  * RESTRICTIONS
67  *
68  * TRANSVERSE CYLINDRICAL EQUAL AREA has no restrictions.
69  *
70  * ENVIRONMENT
71  *
72  * TRANSVERSE CYLINDRICAL EQUAL AREA was tested and certified in the following environments:
73  *
74  * 1. Solaris 2.5 with GCC, version 2.8.1
75  * 2. Windows 95 with MS Visual C++, version 6
76  *
77  * MODIFICATIONS
78  *
79  * Date Description
80  * ---- -----------
81  * 3-1-07 Original C++ Code
82  *
83  */
84 
85 
86 #include "CoordinateSystem.h"
87 
88 
89 namespace MSP
90 {
91  namespace CCS
92  {
93  class MapProjection5Parameters;
94  class MapProjectionCoordinates;
95  class GeodeticCoordinates;
96 
97 
98  /***************************************************************************/
99  /*
100  * DEFINES
101  */
102 
104  {
105  public:
106 
107  /*
108  * The constructor receives the ellipsoid parameters and
109  * Transverse Cylindrical Equal Area projection parameters as inputs, and sets the
110  * corresponding state variables. If any errors occur, an exception is thrown with a description
111  * of the error.
112  *
113  * ellipsoidSemiMajorAxis : Semi-major axis of ellipsoid, in meters (input)
114  * ellipsoidFlattening : Flattening of ellipsoid (input)
115  * centralMeridian : Longitude in radians at the center of (input)
116  * the projection
117  * latitudeOfTrueScale : Latitude in radians at which the (input)
118  * point scale factor is 1.0
119  * falseEasting : A coordinate value in meters assigned to the
120  * central meridian of the projection. (input)
121  * falseNorthing : A coordinate value in meters assigned to the
122  * origin latitude of the projection (input)
123  * scaleFactor : Multiplier which reduces distances in the
124  * projection to the actual distance on the
125  * ellipsoid (input)
126  * errorStatus : Error status (output)
127  */
128 
129  TransverseCylindricalEqualArea( double ellipsoidSemiMajorAxis, double ellipsoidFlattening, double centralMeridian, double latitudeOfTrueScale, double falseEasting, double falseNorthing, double scaleFactor );
130 
131 
133 
134 
136 
137 
139 
140 
141  /*
142  * The function getParameters returns the current ellipsoid
143  * parameters, Transverse Cylindrical Equal Area projection parameters, and scale factor.
144  *
145  * ellipsoidSemiMajorAxis : Semi-major axis of ellipsoid, in meters (output)
146  * ellipsoidFlattening : Flattening of ellipsoid (output)
147  * centralMeridian : Longitude in radians at the center of (output)
148  * the projection
149  * latitudeOfTrueScale : Latitude in radians at which the (output)
150  * point scale factor is 1.0
151  * falseEasting : A coordinate value in meters assigned to the
152  * central meridian of the projection. (output)
153  * falseNorthing : A coordinate value in meters assigned to the
154  * origin latitude of the projection (output)
155  * scaleFactor : Multiplier which reduces distances in the
156  * projection to the actual distance on the
157  * ellipsoid (output)
158  */
159 
161 
162 
163  /*
164  * The function convertFromGeodetic converts geodetic (latitude and
165  * longitude) coordinates to Transverse Cylindrical Equal Area projection (easting and
166  * northing) coordinates, according to the current ellipsoid and Transverse Cylindrical
167  * Equal Area projection parameters. If any errors occur, an exception is thrown with a
168  * description of the error.
169  *
170  * longitude : Longitude (lambda) in radians (input)
171  * latitude : Latitude (phi) in radians (input)
172  * easting : Easting (X) in meters (output)
173  * northing : Northing (Y) in meters (output)
174  */
175 
177 
178 
179  /*
180  * The function convertToGeodetic converts Transverse
181  * Cylindrical Equal Area projection (easting and northing) coordinates
182  * to geodetic (latitude and longitude) coordinates, according to the
183  * current ellipsoid and Transverse Cylindrical Equal Area projection
184  * coordinates. If any errors occur, an exception is thrown with a
185  * description of the error.
186  *
187  * easting : Easting (X) in meters (input)
188  * northing : Northing (Y) in meters (input)
189  * longitude : Longitude (lambda) in radians (output)
190  * latitude : Latitude (phi) in radians (output)
191  */
192 
194 
195  private:
196 
197  /* Ellipsoid Parameters, default to WGS 84 */
198  double es2; /* Eccentricity (0.08181919084262188000) squared */
199  double es4; /* es2 * es2 */
200  double es6; /* es4 * es2 */
201  double es; /* sqrt(es2) */
202  double M0;
203  double qp;
204  double One_MINUS_es2; /* 1.0 - es2 */
205  double One_OVER_2es; /* 1.0 / (2.0 * es) */
206  double a0; /* es2 / 3.0 + 31.0 * es4 / 180.0 + 517.0 * es6 / 5040.0 */
207  double a1; /* 23.0 * es4 / 360.0 + 251.0 * es6 / 3780.0 */
208  double a2; /* 761.0 * es6 / 45360.0 */
209  double b0; /* 3.0 * e1 / 2.0 - 27.0 * e3 / 32.0 */
210  double b1; /* 21.0 * e2 / 16.0 - 55.0 * e4 / 32.0 */
211  double b2; /* 151.0 * e3 / 96.0 */
212  double b3; /* 1097.0 * e4 / 512.0 */
213  double c0; /* 1.0 - es2 / 4.0 - 3.0 * es4 / 64.0 - 5.0 * es6 / 256.0 */
214  double c1; /* 3.0 * es2 / 8.0 + 3.0 * es4 / 32.0 + 45.0 * es6 / 1024.0 */
215  double c2; /* 15.0 * es4 / 256.0 + 45.0 * es6 / 1024.0 */
216  double c3; /* 35.0 * es6 / 3072.0 */
217 
218  /* Transverse Cylindrical Equal Area projection Parameters */
219  double Tcea_Origin_Lat; /* Latitude of origin in radians */
220  double Tcea_Origin_Long; /* Longitude of origin in radians */
221  double Tcea_False_Northing; /* False northing in meters */
222  double Tcea_False_Easting; /* False easting in meters */
223  double Tcea_Scale_Factor; /* Scale factor */
224 
225  /* Maximum variance for easting and northing values for WGS 84.
226  */
227  double Tcea_Min_Easting;
228  double Tcea_Max_Easting;
229  double Tcea_Min_Northing;
230  double Tcea_Max_Northing;
231 
232 
233  double TCEA_Q( double sinlat, double x );
234 
235  double TCEA_COEFF_TIMES_SIN( double coeff, double x, double latit );
236 
237  double TCEA_M( double c0lat, double c1lat, double c2lat, double c3lat );
238 
239  double TCEA_L( double Beta, double c0lat, double c1lat, double c2lat );
240 
241  };
242  }
243 }
244 
245 #endif
246 
247 
248 // CLASSIFICATION: UNCLASSIFIED