00001 00003 // // 00004 // UNCLASSIFIED UNCLASSIFIED UNCLASSIFIED UNCLASSIFIED // 00005 // // 00006 // Description of this module: // 00007 // Utility software that interpolates EGM 2008 // 00008 // geoid heights from one of NGA's geoid height grids. // 00009 // // 00010 // This interpolator loads the worldwide EGM 2008 grid upon // 00011 // instantiation, and it interpolates from the worldwide grid. // 00012 // // 00013 // This interpolator gives exactly the same results as // 00014 // the companion egm2008_aoi_grid_package's interpolator. // 00015 // However, this interpolator is faster when // 00016 // users are requesting tens of thousands of geoid // 00017 // heights at widely dispersed horizontal locations. // 00018 // // 00019 // Revision History: // 00020 // Date Name Description // 00021 // ----------- ------------ ----------------------------------------------// 00022 // 19 Nov 2010 RD Craig Release // 00023 // 11 Feg 2011 RD Craig Upgrades following code review // 00024 // // 00026 00027 #ifndef EGM2008_FULL_GRID_PACKAGE_H 00028 #define EGM2008_FULL_GRID_PACKAGE_H 00029 00030 // This file declares a C++ class 00031 // that interpolates EGM 2008 geoid heights from a 00032 // reformatted version of NGA's geoid-height grid. 00033 00034 // THIS DERIVED CLASS IMPLEMENTS COMPUTATIONAL 00035 // DETAILS SPECIFIC TO THE EGM 2008 FULL-GRID ALGORITHM. 00036 00037 #include "DtccApi.h" 00038 #include "egm2008_geoid_grid.h" 00039 00040 namespace MSP 00041 { 00042 class MSP_DTCC_API Egm2008FullGrid : public Egm2008GeoidGrid { 00043 00044 protected: 00045 00046 // heightGrid: A pointer to a 00047 // one-dimensional array containing 00048 // the reformatted geoid-height grid. 00049 00050 float* _heightGrid; 00051 00052 public: 00053 00054 // Basic functions ..... 00055 00056 Egm2008FullGrid( void ); 00057 00058 Egm2008FullGrid( const Egm2008FullGrid& oldGrid ); 00059 00060 ~Egm2008FullGrid( void ); 00061 00062 Egm2008FullGrid& 00063 operator = ( const Egm2008FullGrid& oldGrid ); 00064 00065 // User functions ..... 00066 00067 // geoidHeight: A function that interpolates 00068 // local geoid height (meters) from 00069 // a reformatted geoid height grid; 00070 // it uses bi-cubic spline interpolation. 00071 00072 virtual int 00073 geoidHeight( 00074 int wSize, // input 00075 double latitude, // input 00076 double longitude, // input 00077 double& gHeight ); // output 00078 00079 protected: 00080 00081 // geoidHeight: A function that interpolates 00082 // local geoid height (meters) from 00083 // a reformatted geoid height grid; 00084 // it uses bilinear interpolation. 00085 00086 virtual int 00087 geoidHeight( 00088 double latitude, // input 00089 double longitude, // input 00090 double& gHeight ); // output 00091 00092 // loadGrid: A function that 00093 // retrieves a reformatted 00094 // EGM 2008 worldwide geoid height grid. 00095 00096 int 00097 loadGrid( void ); 00098 00099 }; // End of Egm2008FullGrid class declaration 00100 00101 } // End of namespace block 00102 00103 #endif 00104 00106 // UNCLASSIFIED UNCLASSIFIED UNCLASSIFIED UNCLASSIFIED // 00108