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)