100 using namespace MSP::CCS;
 
  108 const double PI = 3.14159265358979323e0;      
 
  116   return theta + sinTheta * cosTheta + 2.0 * sinTheta;
 
  125 Eckert4::Eckert4( 
double ellipsoidSemiMajorAxis, 
double ellipsoidFlattening, 
double centralMeridian, 
double falseEasting, 
double falseNorthing ) :
 
  127   es2( 0.0066943799901413800 ),
 
  128   es4( 4.4814723452405e-005 ),
 
  129   es6( 3.0000678794350e-007 ),
 
  130   Ra0( 2690082.6043273 ),
 
  131   Ra1( 8451143.5741087 ),
 
  132   Eck4_Origin_Long( 0.0 ),
 
  133   Eck4_False_Easting( 0.0 ),
 
  134   Eck4_False_Northing( 0.0 ),
 
  135   Eck4_Delta_Northing( 8451144.0 ),
 
  136   Eck4_Max_Easting( 16902288.0 ),
 
  137   Eck4_Min_Easting( -16902288.0 )
 
  156   double inv_f = 1 / ellipsoidFlattening;
 
  158   if (ellipsoidSemiMajorAxis <= 0.0)
 
  162   if ((inv_f < 250) || (inv_f > 350))
 
  166   if ((centralMeridian < -
PI) || (centralMeridian > 
TWO_PI))
 
  179      (1.0 - es2 / 6.0 - 17.0 * es4 / 360.0 - 67.0 * es6 / 3024.0);
 
  180   Ra0 = 0.4222382 * Ra;
 
  181   Ra1 = 1.3265004 * Ra;
 
  182   if (centralMeridian > 
PI)
 
  183     centralMeridian -= 
TWO_PI;
 
  184   Eck4_Origin_Long = centralMeridian;
 
  185   Eck4_False_Easting = falseEasting;
 
  186   Eck4_False_Northing = falseNorthing;
 
  187   if (Eck4_Origin_Long > 0)
 
  189     Eck4_Max_Easting = 16808386.0;
 
  190     Eck4_Min_Easting = -16902288.0;
 
  192   else if (Eck4_Origin_Long < 0)
 
  194     Eck4_Max_Easting = 16902288.0;
 
  195     Eck4_Min_Easting = -16808386.0;
 
  199     Eck4_Max_Easting = 16902288.0;
 
  200     Eck4_Min_Easting = -16902288.0;
 
  214   Eck4_Origin_Long = e.Eck4_Origin_Long;
 
  215   Eck4_False_Easting = e.Eck4_False_Easting;
 
  216   Eck4_False_Northing = e.Eck4_False_Northing;
 
  217   Eck4_Delta_Northing = e.Eck4_Delta_Northing;
 
  218   Eck4_Max_Easting = e.Eck4_Max_Easting;
 
  219   Eck4_Min_Easting = e.Eck4_Min_Easting;
 
  239     Eck4_Origin_Long = e.Eck4_Origin_Long;
 
  240     Eck4_False_Easting = e.Eck4_False_Easting;
 
  241     Eck4_False_Northing = e.Eck4_False_Northing;
 
  242     Eck4_Delta_Northing = e.Eck4_Delta_Northing;
 
  243     Eck4_Max_Easting = e.Eck4_Max_Easting;
 
  244     Eck4_Min_Easting = e.Eck4_Min_Easting;
 
  287   double sin_theta, cos_theta;
 
  290   double delta_theta = 1.0;
 
  291   double dt_tolerance = 4.85e-10;        
 
  295   double longitude = geodeticCoordinates->
longitude();
 
  296   double latitude  = geodeticCoordinates->
latitude();
 
  297   double slat  = sin(latitude);
 
  298   double theta = latitude / 2.0;
 
  304   if ((longitude < -
PI) || (longitude > 
TWO_PI))
 
  309   dlam = longitude - Eck4_Origin_Long;
 
  318   while (fabs(delta_theta) > dt_tolerance && count)
 
  320     sin_theta = sin(theta);
 
  321     cos_theta = cos(theta);
 
  324                   (2.0 * cos_theta * (1.0 + cos_theta));
 
  325     theta += delta_theta;
 
  332   double easting = Ra0 * dlam * (1.0 + cos(theta)) + Eck4_False_Easting;
 
  333   double northing = Ra1 * sin(theta) + Eck4_False_Northing;
 
  356   double sin_theta, cos_theta;
 
  361   double easting = mapProjectionCoordinates->
easting();
 
  362   double northing = mapProjectionCoordinates->
northing();
 
  364   if ((easting < (Eck4_False_Easting + Eck4_Min_Easting))
 
  365       || (easting > (Eck4_False_Easting + Eck4_Max_Easting)))
 
  369   if ((northing < (Eck4_False_Northing - Eck4_Delta_Northing)) 
 
  370       || (northing > (Eck4_False_Northing + Eck4_Delta_Northing)))
 
  375   dy = northing - Eck4_False_Northing;
 
  376   dx = easting - Eck4_False_Easting;
 
  384   sin_theta = sin(theta);
 
  385   cos_theta = cos(theta);
 
  389   double longitude = Eck4_Origin_Long + dx / (Ra0 * (1 + cos_theta));
 
  403   else if (longitude < -
PI)