00001 // 00002 // C++ Interface: earth_geometry 00003 // 00004 // Description: set of constants that defines the geometry of the earth 00005 // 00006 // 00007 // Author: Nicolas PASCAL <nicolas.pascal@icare.univ-lille1.fr>, (C) 2012 00008 // 00009 // Copyright: See COPYING file that comes with this distribution 00010 // 00011 // 00012 00013 #ifndef EARTH_GEOMETRY_H 00014 #define EARTH_GEOMETRY_H 00015 00016 #include "geometry_common.h" 00017 00022 namespace Earth { 00024 static const double g0 = 9.80665; 00026 static const double authalic_radius = 6371007.2; 00027 00031 typedef enum Model { 00032 SPHERICAL_MODEL = 0, // sphere 00033 WGS84_MODEL, // ellipsoid ; World Geodetic System 1984 00034 } Model; 00035 00039 namespace WGS84 { 00041 const double a = 6378137.0; 00043 const double b = 6356752.314245; 00045 const double a2 = a * a; 00047 const double a4 = a2 * a2; 00049 const double b2 = b * b; 00051 const double b4 = b2 * b2; 00053 const double e2 = 1. - (b2 / a2); 00055 const double e = sqrt (e2); // eccentricity 00056 const double ab = a / b; 00057 const double e22 = (a2 - b2) / b2; 00058 const double Ime2 = 1. - e2; 00064 double get_N(double theta); 00065 } 00073 double get_radius (); 00074 } 00075 00094 // inline const double IDW_interp ( double lat, double lon, 00095 // double lat1, double lon1, double v1, 00096 // double lat2, double lon2, double v2, 00097 // double lat3, double lon3, double v3, 00098 // double lat4, double lon4, double v4 00099 // ) { 00100 // 00101 // // compute the haversine distance from P to P1, P2, P3 and P4 00102 // double d1 = Geocentric::get_haversine_dist ( lat, lon, lat1, lon1 ); 00103 // double d2 = Geocentric::get_haversine_dist ( lat, lon, lat2, lon2 ); 00104 // double d3 = Geocentric::get_haversine_dist ( lat, lon, lat3, lon3 ); 00105 // double d4 = Geocentric::get_haversine_dist ( lat, lon, lat4, lon4 ); 00106 // 00107 // // compute the corresponding weights 00108 // double w1 = 1. / pow ( d1, 2. ); 00109 // double w2 = 1. / pow ( d2, 2. ); 00110 // double w3 = 1. / pow ( d3, 2. ); 00111 // double w4 = 1. / pow ( d4, 2. ); 00112 // 00113 // // compute interpolation 00114 // return ( w1 * v1 + w2 * v2 + w3 * v3 + w4 * v4 ) / ( w1 + w2 + w3 + w4 ); 00115 // }; 00116 // 00117 // inline const double DW_interp ( double lat, double lon, 00118 // double lat1, double lon1, double v1, 00119 // double lat2, double lon2, double v2, 00120 // double lat3, double lon3, double v3, 00121 // double lat4, double lon4, double v4 00122 // ) { 00123 // // compute the haversine distance from P to P1, P2, P3 and P4 00124 // double d1 = Geocentric::get_haversine_dist ( lat, lon, lat1, lon1 ); 00125 // double d2 = Geocentric::get_haversine_dist ( lat, lon, lat2, lon2 ); 00126 // double d3 = Geocentric::get_haversine_dist ( lat, lon, lat3, lon3 ); 00127 // double d4 = Geocentric::get_haversine_dist ( lat, lon, lat4, lon4 ); 00128 // 00129 // // compute the corresponding weights 00130 // double w1 = d1; 00131 // double w2 = d2; 00132 // double w3 = d3; 00133 // double w4 = d4; 00134 // 00135 // // compute interpolation 00136 // return ( w1 * v1 + w2 * v2 + w3 * v3 + w4 * v4 ) / ( w1 + w2 + w3 + w4 ); 00137 // }; 00138 #endif