79 const double PI = 3.14159265358979323;
81 const double PIDIV2 = PI / 2.0;
82 const double TWOPI = 2.0 *
PI;
84 const double DEG_PER_RAD = 180.0 /
PI;
85 const double RAD_PER_DEG = PI / 180.0;
87 const double SEMI_MAJOR_AXIS = 6378137.0;
88 const double FLATTENING = 1.0 / 298.257223563;
113 char* pathName = NULL;
117 pathName =
"/data/data/com.baesystems.msp.geotrans/lib/";
121 pathName = getenv(
"MSPCCS_DATA" );
123 if ( NULL == pathName )
125 strcpy( pathName,
"../../data" );
128 length = strlen( pathName );
130 for (i = 0; i < length; i++)
_gridFname += pathName[i];
133 "/Und_min2.5x2.5_egm2008_WGS84_TideFree_reformatted";
225 char* pathName = NULL;
229 pathName =
"/data/data/com.baesystems.msp.geotrans/lib/";
233 pathName = getenv(
"MSPCCS_DATA" );
235 if ( NULL == pathName )
237 strcpy( pathName,
"../../data" );
240 length = strlen( pathName );
242 for( i = 0; i < length; i++ )
_gridFname += pathName[ i ];
305 _dLat = oldGrid.
_dLat;
306 _dLon = oldGrid.
_dLon;
349 if (
this == & oldGrid )
return ( *
this );
424 if (( i < 0 ) || ( i >=
_nGridRows ))
return( 1 );
436 ( -PIDIV2 -
_dLat * double( i - LIMIT1 ));
448 if (( i >= LIMIT1 ) && ( i <= LIMIT2 ))
462 ( PIDIV2 -
_dLat * double( i - LIMIT2 ));
474 catch ( ... ) {
return( 1 ); }
488 const double posts[],
589 const int TWENTY = 20;
601 if ( n < 3 )
return( 1 );
609 for (k = 2; k < n; k++)
611 p = ( w[ k-2 ] / 2.0 ) + 2.0;
615 ( posts[ k ] - ( 2.0 * posts[ k-1 ]) +
616 posts[ k-2 ]) - ( moments[ k-2 ] / 2.0 )) / p;
621 moments[ n-1 ] = 0.0;
623 for (k = n - 1; k >= 2; k--)
625 moments[ k-1 ] += ( w[ k-1 ] * moments[ k ]);
630 catch ( ... ) {
return( 1 ); }
645 const double posts[],
646 const double moments[] )
699 const double MIN_ABSCISSA = 0.0;
713 "Error: Egm2008GeoidGrid::spline: not enough points");
718 maxAbscissa = double( n - 1 );
723 if ( x <= MIN_ABSCISSA )
727 ( x - MIN_ABSCISSA ) *
728 ( posts[ 1 ] - posts[ 0 ] -
729 ( moments[ 1 ] / 6.0 ));
731 else if ( x >= maxAbscissa )
735 ( x - maxAbscissa ) *
736 ( posts[ n-1 ] - posts[ n-2 ] +
737 ( moments[ n-2 ] / 6.0 ));
741 j = int( floor( x ));
743 dx = x - double( j );
745 mJp1 = moments[ j+1 ];
749 dx * (( posts[ j+1 ] - posts[ j ] -
750 ( mJ / 3.0 ) - ( mJp1 / 6.0 )) +
752 dx * ( mJp1 - mJ ) / 6.0 ));
760 "Error: Egm2008GeoidGrid::spline");
796 char* b = (
char *) buffer;
798 for (
size_t c = 0; c < count; c ++ )
800 for (
size_t s = 0; s < ( size / 2 ); s++ )
802 temp = b[ c * size + s ];
803 b[ c * size + s] = b[ c * size + size - s - 1 ];
804 b[ c * size + size - s - 1] = temp;
851 ( latitude > maxLatitude ))
return( 1 );
853 while ( longitude < 0.0 ) longitude += TWOPI;
854 while ( longitude > TWOPI ) longitude -= TWOPI;
864 catch ( ... ) {
return( 1 ); }