OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimTransCylEquAreaProjection.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 // Copyright (C) 2000 ImageLinks Inc.
3 //
4 // License: See top LICENSE.txt file.
5 //
6 // Author: Garrett Potts
7 //
8 // Description:
9 //
10 // Calls Geotrans Transverse Cylindrical Equal Area
11 // projection code.
12 //*******************************************************************
13 // $Id: ossimTransCylEquAreaProjection.cpp 17815 2010-08-03 13:23:14Z dburken $
14 
15 #include <math.h>
18 
19 RTTI_DEF1(ossimTransCylEquAreaProjection, "ossimTransCylEquAreaProjection", ossimMapProjection)
20 /***************************************************************************/
21 /*
22  * DEFINES
23  */
24 
25 #ifndef PI_OVER_2
26 # define PI_OVER_2 ( M_PI / 2.0)
27 #endif
28 #ifndef TWO_PI
29 # define TWO_PI (2.0 * M_PI)
30 #endif
31 
32 #define TCEA_Q(sinlat,x) (One_MINUS_es2*(sinlat/(1.0-es2*sinlat*sinlat)-One_OVER_2es*log((1-x)/(1+x))))
33 #define TCEA_COEFF_TIMES_SIN(coeff,x,latit) (coeff * sin(x*latit))
34 #define TCEA_M(c0lat,c1lat,c2lat,c3lat) (Tcea_a * (c0lat - c1lat + c2lat - c3lat))
35 #define TCEA_L(Beta,c0lat,c1lat,c2lat) (Beta + c0lat + c1lat + c2lat)
36 #define MIN_SCALE_FACTOR 0.3
37 #define MAX_SCALE_FACTOR 3.0
38 
39 #define TCEA_NO_ERROR 0x0000
40 #define TCEA_LAT_ERROR 0x0001
41 #define TCEA_LON_ERROR 0x0002
42 #define TCEA_EASTING_ERROR 0x0004
43 #define TCEA_NORTHING_ERROR 0x0008
44 #define TCEA_ORIGIN_LAT_ERROR 0x0010
45 #define TCEA_CENT_MER_ERROR 0x0020
46 #define TCEA_A_ERROR 0x0040
47 #define TCEA_INV_F_ERROR 0x0080
48 #define TCEA_SCALE_FACTOR_ERROR 0x0100
49 #define TCEA_LON_WARNING 0x0200
50 
52  const ossimGpt& origin)
53  :ossimMapProjection(ellipsoid, origin)
54 {
55  setDefaults();
56  update();
57 }
58 
60  const ossimGpt& origin,
61  double falseEasting,
62  double falseNorthing,
63  double scaleFactor)
64  :ossimMapProjection(ellipsoid, origin)
65 {
66  Tcea_False_Easting = falseEasting;
67  Tcea_False_Northing = falseNorthing;
68  Tcea_Scale_Factor = scaleFactor;
69  Tcea_Min_Easting = -6398628.0;
70  Tcea_Max_Easting = 6398628.0;
71  Tcea_Min_Northing = -20003931.0;
72  Tcea_Max_Northing = 20003931.0;
73 
74  update();
75 }
76 
78 {
79  Tcea_False_Easting = falseEasting;
80 
81  update();
82 }
83 
84 
86 {
87  Tcea_False_Northing = falseNorthing;
88 
89  update();
90 }
91 
93  double falseNorthing)
94 {
95  Tcea_False_Easting = falseEasting;
96  Tcea_False_Northing = falseNorthing;
97 
98  update();
99 }
100 
102 {
103  Tcea_Scale_Factor = scaleFactor;
104 
105  update();
106 }
107 
109  double falseNorthing,
110  double scaleFactor)
111 {
112  Tcea_False_Easting = falseEasting;
113  Tcea_False_Northing = falseNorthing;
114  Tcea_Scale_Factor = scaleFactor;
115 
116  update();
117 }
118 
120 {
121  Tcea_Scale_Factor = 1.0;
122  Tcea_False_Easting = 0.0;
123  Tcea_False_Northing = 0.0;
124  Tcea_Min_Easting = -6398628.0;
125  Tcea_Max_Easting = 6398628.0;
126  Tcea_Min_Northing = -20003931.0;
127  Tcea_Max_Northing = 20003931.0;
128 }
129 
131 {
134  theOrigin.latr(),
135  theOrigin.lonr(),
139 
142 
144 }
145 
146 
148 {
149  double lat = 0.0;
150  double lon = 0.0;
151 
153  eastingNorthing.y,
154  &lat,
155  &lon);
156 
157  return ossimGpt(lat*DEG_PER_RAD, lon*DEG_PER_RAD, 0.0, theDatum);
158 }
159 
161 {
162  double easting = 0.0;
163  double northing = 0.0;
164  ossimGpt gpt = latLon;
165 
166  if (theDatum)
167  {
168  if (theDatum->code() != latLon.datum()->code())
169  {
170  gpt.changeDatum(theDatum); // Shift to our datum.
171  }
172  }
173 
175  gpt.lonr(),
176  &easting,
177  &northing);
178 
179  return ossimDpt(easting, northing);
180 }
181 
183 {
184  kwl.add(prefix,
187  true);
188 
189  return ossimMapProjection::saveState(kwl, prefix);
190 }
191 
193  const char* prefix)
194 {
195  bool flag = ossimMapProjection::loadState(kwl, prefix);
196  const char* type = kwl.find(prefix, ossimKeywordNames::TYPE_KW);
197  const char* scaleFactor = kwl.find(prefix, ossimKeywordNames::SCALE_FACTOR_KW);
198 
199  setDefaults();
200 
202  {
205 
206  if(scaleFactor)
207  {
208  Tcea_Scale_Factor = ossimString(scaleFactor).toDouble();
209  }
210  }
211 
212  update();
213 
214  return flag;
215 }
216 
218  double f,
219  double Origin_Latitude,
220  double Central_Meridian,
221  double False_Easting,
222  double False_Northing,
223  double Scale_Factor)
224 { /* BEGIN Set_Trans_Cyl_Eq_Area_Parameters */
225 /*
226  * The function Set_Trans_Cyl_Eq_Area_Parameters receives the ellipsoid parameters and
227  * Transverse Cylindrical Equal Area projection parameters as inputs, and sets the
228  * corresponding state variables. If any errors occur, the error code(s) are returned
229  * by the function, otherwise TCEA_NO_ERROR is returned.
230  *
231  * a : Semi-major axis of ellipsoid, in meters (input)
232  * f : Flattening of ellipsoid (input)
233  * Origin_Latitude : Latitude in radians at which the (input)
234  * point scale factor is 1.0
235  * Central_Meridian : Longitude in radians at the center of (input)
236  * the projection
237  * False_Easting : A coordinate value in meters assigned to the
238  * central meridian of the projection. (input)
239  * False_Northing : A coordinate value in meters assigned to the
240  * origin latitude of the projection (input)
241  * Scale_Factor : Multiplier which reduces distances in the
242  * projection to the actual distance on the
243  * ellipsoid (input)
244  */
245 
246  double sin_lat_90 = sin(PI_OVER_2);
247  double x, j, three_es4;
248  double Sqrt_One_MINUS_es2;
249  double e1, e2, e3, e4;
250  double lat, sin2lat, sin4lat, sin6lat;
251  double temp, temp_northing;
252 // double inv_f = 1 / f;
253  long Error_Code = TCEA_NO_ERROR;
254 
255 // if (a <= 0.0)
256 // { /* Semi-major axis must be greater than zero */
257 // Error_Code |= TCEA_A_ERROR;
258 // }
259 // if ((inv_f < 250) || (inv_f > 350))
260 // { /* Inverse flattening must be between 250 and 350 */
261 // Error_Code |= TCEA_INV_F_ERROR;
262 // }
263 // if ((Origin_Latitude < -PI_OVER_2) || (Origin_Latitude > PI_OVER_2))
264 // { /* origin latitude out of range */
265 // Error_Code |= TCEA_ORIGIN_LAT_ERROR;
266 // }
267 // if ((Central_Meridian < -M_PI) || (Central_Meridian > TWO_PI))
268 // { /* origin longitude out of range */
269 // Error_Code |= TCEA_CENT_MER_ERROR;
270 // }
271 // if ((Scale_Factor < MIN_SCALE_FACTOR) || (Scale_Factor > MAX_SCALE_FACTOR))
272 // {
273 // Error_Code |= TCEA_SCALE_FACTOR_ERROR;
274 // }
275 
276  if (!Error_Code)
277  { /* no errors */
278  Tcea_a = a;
279  Tcea_f = f;
280  Tcea_Origin_Lat = Origin_Latitude;
281  if (Central_Meridian > M_PI)
282  Central_Meridian -= TWO_PI;
283  Tcea_Origin_Long = Central_Meridian;
284  Tcea_False_Northing = False_Northing;
285  Tcea_False_Easting = False_Easting;
286  Tcea_Scale_Factor = Scale_Factor;
287 
288  es2 = 2 * Tcea_f - Tcea_f * Tcea_f;
289  es = sqrt(es2);
290  One_MINUS_es2 = 1.0 - es2;
291  Sqrt_One_MINUS_es2 = sqrt(One_MINUS_es2);
292  One_OVER_2es = 1.0 / (2.0 * es);
293  es4 = es2 * es2;
294  es6 = es4 * es2;
295  x = es * sin_lat_90;
296  qp = TCEA_Q(sin_lat_90,x);
297 
298  a0 = es2 / 3.0 + 31.0 * es4 / 180.0 + 517.0 * es6 / 5040.0;
299  a1 = 23.0 * es4 / 360.0 + 251.0 * es6 / 3780.0;
300  a2 = 761.0 * es6 / 45360.0;
301 
302  e1 = (1.0 - Sqrt_One_MINUS_es2) / (1.0 + Sqrt_One_MINUS_es2);
303  e2 = e1 * e1;
304  e3 = e2 * e1;
305  e4 = e3 * e1;
306  b0 = 3.0 * e1 / 2.0 - 27.0 * e3 / 32.0;
307  b1 = 21.0 * e2 / 16.0 - 55.0 * e4 / 32.0;
308  b2 = 151.0 * e3 / 96.0;
309  b3 = 1097.0 * e4 / 512.0;
310 
311  j = 45.0 * es6 / 1024.0;
312  three_es4 = 3.0 * es4;
313  c0 = 1.0 - es2 / 4.0 - three_es4 / 64.0 - 5.0 * es6 / 256.0;
314  c1 = 3.0 * es2 / 8.0 + three_es4 / 32.0 + j;
315  c2 = 15.0 * es4 / 256.0 + j;
316  c3 = 35.0 * es6 / 3072.0;
317  lat = c0 * Tcea_Origin_Lat;
318  sin2lat = TCEA_COEFF_TIMES_SIN(c1, 2.0, Tcea_Origin_Lat);
319  sin4lat = TCEA_COEFF_TIMES_SIN(c2, 4.0, Tcea_Origin_Lat);
320  sin6lat = TCEA_COEFF_TIMES_SIN(c3, 6.0, Tcea_Origin_Lat);
321  M0 = TCEA_M(lat, sin2lat, sin4lat, sin6lat);
322  Convert_Geodetic_To_Trans_Cyl_Eq_Area(PI_OVER_2, M_PI, &temp, &temp_northing);
323  if (temp_northing > 0)
324  {
325  Tcea_Min_Northing = temp_northing - 20003931.458986;
326  Tcea_Max_Northing = temp_northing;
327  }
328  else if (temp_northing < 0)
329  {
330  Tcea_Max_Northing = temp_northing + 20003931.458986;
331  Tcea_Min_Northing = temp_northing;
332  }
333  } /* END OF if(!Error_Code) */
334  return (Error_Code);
335 } /* END OF Set_Trans_Cyl_Eq_Area_Parameters */
336 
338  double *f,
339  double *Origin_Latitude,
340  double *Central_Meridian,
341  double *False_Easting,
342  double *False_Northing,
343  double *Scale_Factor)const
344 { /* BEGIN Get_Trans_Cyl_Eq_Area_Parameters */
345 /*
346  * The function Get_Trans_Cyl_Eq_Area_Parameters returns the current ellipsoid
347  * parameters, Transverse Cylindrical Equal Area projection parameters, and scale factor.
348  *
349  * a : Semi-major axis of ellipsoid, in meters (output)
350  * f : Flattening of ellipsoid (output)
351  * Origin_Latitude : Latitude in radians at which the (output)
352  * point scale factor is 1.0
353  * Central_Meridian : Longitude in radians at the center of (output)
354  * the projection
355  * False_Easting : A coordinate value in meters assigned to the
356  * central meridian of the projection. (output)
357  * False_Northing : A coordinate value in meters assigned to the
358  * origin latitude of the projection (output)
359  * Scale_Factor : Multiplier which reduces distances in the
360  * projection to the actual distance on the
361  * ellipsoid (output)
362  */
363 
364  *a = Tcea_a;
365  *f = Tcea_f;
366  *Origin_Latitude = Tcea_Origin_Lat;
367  *Central_Meridian = Tcea_Origin_Long;
368  *False_Easting = Tcea_False_Easting;
369  *False_Northing = Tcea_False_Northing;
370  *Scale_Factor = Tcea_Scale_Factor;
371 
372  return;
373 } /* END OF Get_Trans_Cyl_Eq_Area_Parameters */
374 
375 
377  double Longitude,
378  double *Easting,
379  double *Northing)const
380 { /* BEGIN Convert_Geodetic_To_Trans_Cyl_Eq_Area */
381 /*
382  * The function Convert_Geodetic_To_Trans_Cyl_Eq_Area converts geodetic (latitude and
383  * longitude) coordinates to Transverse Cylindrical Equal Area projection (easting and
384  * northing) coordinates, according to the current ellipsoid and Transverse Cylindrical
385  * Equal Area projection parameters. If any errors occur, the error code(s) are returned
386  * by the function, otherwise TCEA_NO_ERROR is returned.
387  *
388  * Latitude : Latitude (phi) in radians (input)
389  * Longitude : Longitude (lambda) in radians (input)
390  * Easting : Easting (X) in meters (output)
391  * Northing : Northing (Y) in meters (output)
392  */
393 
394  double x;
395  double dlam; /* Longitude - Central Meridan */
396  double sin_lat = sin(Latitude);
397  double qq, qq_OVER_qp;
398  double beta, betac;
399  double sin2betac, sin4betac, sin6betac;
400  double PHIc;
401  double phi, sin2phi, sin4phi, sin6phi;
402  double sinPHIc;
403  double Mc;
404  long Error_Code = TCEA_NO_ERROR;
405 
406 // if ((Latitude < -PI_OVER_2) || (Latitude > PI_OVER_2))
407 // { /* Latitude out of range */
408 // Error_Code |= TCEA_LAT_ERROR;
409 // }
410 // if ((Longitude < -M_PI) || (Longitude > TWO_PI))
411 // { /* Longitude out of range */
412 // Error_Code |= TCEA_LON_ERROR;
413 // }
414  if (!Error_Code)
415  { /* no errors */
416  dlam = Longitude - Tcea_Origin_Long;
417  if (fabs(dlam) >= (M_PI / 2.0))
418  { /* Distortion will result if Longitude is more than 90 degrees from the Central Meridian */
419  Error_Code |= TCEA_LON_WARNING;
420  }
421 
422  if (dlam > M_PI)
423  {
424  dlam -= TWO_PI;
425  }
426  if (dlam < -M_PI)
427  {
428  dlam += TWO_PI;
429  }
430  if (Latitude == PI_OVER_2)
431  {
432  qq = qp;
433  qq_OVER_qp = 1.0;
434  }
435  else
436  {
437  x = es * sin_lat;
438  qq = TCEA_Q(sin_lat, x);
439  qq_OVER_qp = qq / qp;
440  }
441 
442 
443  if (qq_OVER_qp > 1.0)
444  qq_OVER_qp = 1.0;
445  else if (qq_OVER_qp < -1.0)
446  qq_OVER_qp = -1.0;
447 
448  beta = asin(qq_OVER_qp);
449  betac = atan(tan(beta) / cos(dlam));
450 
451  if ((fabs(betac) - PI_OVER_2) > 1.0e-8)
452  PHIc = betac;
453  else
454  {
455  sin2betac = TCEA_COEFF_TIMES_SIN(a0, 2.0, betac);
456  sin4betac = TCEA_COEFF_TIMES_SIN(a1, 4.0, betac);
457  sin6betac = TCEA_COEFF_TIMES_SIN(a2, 6.0, betac);
458  PHIc = TCEA_L(betac, sin2betac, sin4betac, sin6betac);
459  }
460 
461  sinPHIc = sin(PHIc);
462  *Easting = Tcea_a * cos(beta) * cos(PHIc) * sin(dlam) /
463  (Tcea_Scale_Factor * cos(betac) * sqrt(1.0 - es2 *
464  sinPHIc * sinPHIc)) + Tcea_False_Easting;
465 
466  phi = c0 * PHIc;
467  sin2phi = TCEA_COEFF_TIMES_SIN(c1, 2.0, PHIc);
468  sin4phi = TCEA_COEFF_TIMES_SIN(c2, 4.0, PHIc);
469  sin6phi = TCEA_COEFF_TIMES_SIN(c3, 6.0, PHIc);
470  Mc = TCEA_M(phi, sin2phi, sin4phi, sin6phi);
471 
472  *Northing = Tcea_Scale_Factor * (Mc - M0) + Tcea_False_Northing;
473  }
474  return (Error_Code);
475 } /* END OF Convert_Geodetic_To_Trans_Cyl_Eq_Area */
476 
477 
479  double Northing,
480  double *Latitude,
481  double *Longitude)const
482 { /* BEGIN Convert_Trans_Cyl_Eq_Area_To_Geodetic */
483 /*
484  * The function Convert_Trans_Cyl_Eq_Area_To_Geodetic converts Transverse
485  * Cylindrical Equal Area projection (easting and northing) coordinates
486  * to geodetic (latitude and longitude) coordinates, according to the
487  * current ellipsoid and Transverse Cylindrical Equal Area projection
488  * coordinates. If any errors occur, the error code(s) are returned by the
489  * function, otherwise TCEA_NO_ERROR is returned.
490  *
491  * Easting : Easting (X) in meters (input)
492  * Northing : Northing (Y) in meters (input)
493  * Latitude : Latitude (phi) in radians (output)
494  * Longitude : Longitude (lambda) in radians (output)
495  */
496 
497  double x;
498  double dx; /* Delta easting - Difference in easting (easting-FE) */
499  double dy; /* Delta northing - Difference in northing (northing-FN) */
500  double Mc;
501  double MUc;
502  double sin2mu, sin4mu, sin6mu, sin8mu;
503  double PHIc;
504  double Qc;
505  double sin_lat;
506  double beta, betac, beta_prime;
507  double sin2beta, sin4beta, sin6beta;
508  double cosbetac;
509  double Qc_OVER_qp;
510  double temp;
511 
512  long Error_Code = TCEA_NO_ERROR;
513 
514 // if ((Easting < (Tcea_False_Easting + Tcea_Min_Easting))
515 // || (Easting > (Tcea_False_Easting + Tcea_Max_Easting)))
516 // { /* Easting out of range */
517 // Error_Code |= TCEA_EASTING_ERROR;
518 // }
519 // if ((Northing < (Tcea_False_Northing + Tcea_Min_Northing))
520 // || (Northing > (Tcea_False_Northing + Tcea_Max_Northing)))
521 // { /* Northing out of range */
522 // Error_Code |= TCEA_NORTHING_ERROR;
523 // }
524  if (!Error_Code)
525  { /* no errors */
526  dy = Northing - Tcea_False_Northing;
527  dx = Easting - Tcea_False_Easting;
528  Mc = M0 + dy / Tcea_Scale_Factor;
529  MUc = Mc / (Tcea_a * c0);
530 
531  sin2mu = TCEA_COEFF_TIMES_SIN(b0, 2.0, MUc);
532  sin4mu = TCEA_COEFF_TIMES_SIN(b1, 4.0, MUc);
533  sin6mu = TCEA_COEFF_TIMES_SIN(b2, 6.0, MUc);
534  sin8mu = TCEA_COEFF_TIMES_SIN(b3, 8.0, MUc);
535  PHIc = MUc + sin2mu + sin4mu + sin6mu + sin8mu;
536 
537  sin_lat = sin(PHIc);
538  x = es * sin_lat;
539  Qc = TCEA_Q(sin_lat, x);
540  Qc_OVER_qp = Qc / qp;
541 
542  if (Qc_OVER_qp < -1.0)
543  Qc_OVER_qp = -1.0;
544  else if (Qc_OVER_qp > 1.0)
545  Qc_OVER_qp = 1.0;
546 
547  betac = asin(Qc_OVER_qp);
548  cosbetac = cos(betac);
549  temp = Tcea_Scale_Factor * dx * cosbetac * sqrt(1.0 -
550  es2 * sin_lat * sin_lat) / (Tcea_a * cos(PHIc));
551  if (temp > 1.0)
552  temp = 1.0;
553  else if (temp < -1.0)
554  temp = -1.0;
555  beta_prime = -asin(temp);
556  beta = asin(cos(beta_prime) * sin(betac));
557 
558  sin2beta = TCEA_COEFF_TIMES_SIN(a0, 2.0, beta);
559  sin4beta = TCEA_COEFF_TIMES_SIN(a1, 4.0, beta);
560  sin6beta = TCEA_COEFF_TIMES_SIN(a2, 6.0, beta);
561  *Latitude = TCEA_L(beta, sin2beta, sin4beta, sin6beta);
562 
563  *Longitude = Tcea_Origin_Long - atan(tan(beta_prime) / cosbetac);
564 
565 // if (*Latitude > PI_OVER_2) /* force distorted values to 90, -90 degrees */
566 // *Latitude = PI_OVER_2;
567 // else if (*Latitude < -PI_OVER_2)
568 // *Latitude = -PI_OVER_2;
569 
570 // if (*Longitude > M_PI)
571 // *Longitude -= TWO_PI;
572 // if (*Longitude < -M_PI)
573 // *Longitude += TWO_PI;
574 
575 // if (*Longitude > M_PI) /* force distorted values to 180, -180 degrees */
576 // *Longitude = M_PI;
577 // else if (*Longitude < -M_PI)
578 // *Longitude = -M_PI;
579  }
580  return (Error_Code);
581 } /* END OF Convert_Trans_Cyl_Eq_Area_To_Geodetic */
582 
583 //*************************************************************************************************
585 //*************************************************************************************************
587 {
588  if (!ossimMapProjection::operator==(proj))
589  return false;
590 
592  dynamic_cast<const ossimTransCylEquAreaProjection*>(&proj);
593  if (!p) return false;
594 
596 
597  return true;
598 }
void setFalseEastingNorthing(double falseEasting, double falseNorthing)
ossim_uint32 x
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
ossimTransCylEquAreaProjection(const ossimEllipsoid &ellipsoid=ossimEllipsoid(6378137, 6356752.3142), const ossimGpt &origin=ossimGpt())
#define TCEA_LON_WARNING
#define DEG_PER_RAD
void Get_Trans_Cyl_Eq_Area_Parameters(double *a, double *f, double *Origin_Latitude, double *Central_Meridian, double *False_Easting, double *False_Northing, double *Scale_Factor) const
Represents serializable keyword/value map.
const char * find(const char *key) const
void setParameters(double falseEasting, double falseNorthing, double scaleFactor)
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
bool almostEqual(T x, T y, T tolerance=FLT_EPSILON)
Definition: ossimCommon.h:53
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
virtual ossimDpt forward(const ossimGpt &latLon) const
All map projections will convert the world coordinate to an easting northing (Meters).
double y
Definition: ossimDpt.h:165
virtual const ossimString & code() const
Definition: ossimDatum.h:57
static const char * TYPE_KW
virtual ossimGpt inverse(const ossimDpt &eastingNorthing) const
Will take a point in meters and convert it to ground.
void changeDatum(const ossimDatum *datum)
This will actually perform a shift.
Definition: ossimGpt.cpp:316
#define STATIC_TYPE_NAME(T)
Definition: ossimRtti.h:325
const ossimDatum * datum() const
datum().
Definition: ossimGpt.h:196
#define TCEA_COEFF_TIMES_SIN(coeff, x, latit)
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
#define M_PI
const double & getA() const
double lonr() const
Returns the longitude in radian measure.
Definition: ossimGpt.h:76
long Convert_Geodetic_To_Trans_Cyl_Eq_Area(double Latitude, double Longitude, double *Easting, double *Northing) const
double toDouble() const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
#define TCEA_M(c0lat, c1lat, c2lat, c3lat)
long Set_Trans_Cyl_Eq_Area_Parameters(double a, double f, double Origin_Latitude, double Central_Meridian, double False_Easting, double False_Northing, double Scale_Factor)
#define TCEA_Q(sinlat, x)
virtual bool operator==(const ossimProjection &projection) const
Returns TRUE if principal parameters are within epsilon tolerance.
double x
Definition: ossimDpt.h:164
double latr() const
latr().
Definition: ossimGpt.h:66
const double & getFlattening() const
ossimEllipsoid theEllipsoid
This method verifies that the projection parameters match the current pcs code.
static const char * SCALE_FACTOR_KW
#define RTTI_DEF1(cls, name, b1)
Definition: ossimRtti.h:485
ossimDpt theFalseEastingNorthing
Hold the false easting northing.
long Convert_Trans_Cyl_Eq_Area_To_Geodetic(double Easting, double Northing, double *Latitude, double *Longitude) const
#define TCEA_L(Beta, c0lat, c1lat, c2lat)
const ossimDatum * theDatum
This is only set if we want to have built in datum shifting.