📄 tropmodel.hpp
字号:
/// Compute and return the zenith delay for wet component of the troposphere virtual double wet_zenith_delay(void) const throw(InvalidTropModel); /// Compute and return the mapping function for dry component /// of the troposphere /// @param elevation Elevation of satellite as seen at receiver, in degrees virtual double dry_mapping_function(double elevation) const throw(InvalidTropModel); /// Compute and return the mapping function for wet component /// of the troposphere /// @param elevation Elevation of satellite as seen at receiver, in degrees virtual double wet_mapping_function(double elevation) const throw(InvalidTropModel); /// Re-define the tropospheric model with explicit weather data. /// Typically called just before correction(). /// @param T temperature in degrees Celsius /// @param P atmospheric pressure in millibars /// @param H relative humidity in percent virtual void setWeather(const double& T, const double& P, const double& H) throw(InvalidParameter); /// Re-define the tropospheric model with explicit weather data. /// Typically called just before correction(). /// @param wx the weather to use for this correction virtual void setWeather(const WxObservation& wx) throw(InvalidParameter); private: double Cdrydelay; double Cwetdelay; double Cdrymap; double Cwetmap; }; // end class SimpleTropModel //--------------------------------------------------------------------------------- /** Tropospheric model based on Goad and Goodman(1974), * "A Modified Hopfield Tropospheric Refraction Correction Model," Paper * presented at the Fall Annual Meeting of the American Geophysical Union, * San Francisco, December 1974, as presented in Leick, "GPS Satellite Surveying," * Wiley, NY, 1990, Chapter 9 (note particularly Table 9.1). */ class GGTropModel : public TropModel { public: /// Empty constructor GGTropModel(void); /// Creates a trop model, with weather observation input /// @param wx the weather to use for this correction. GGTropModel(const WxObservation& wx) throw(InvalidParameter); /// Create a tropospheric model from explicit weather data /// @param T temperature in degrees Celsius /// @param P atmospheric pressure in millibars /// @param H relative humidity in percent GGTropModel(const double& T, const double& P, const double& H) throw(InvalidParameter); /// Compute and return the zenith delay for dry component /// of the troposphere virtual double dry_zenith_delay(void) const throw(InvalidTropModel); /// Compute and return the zenith delay for wet component /// of the troposphere virtual double wet_zenith_delay(void) const throw(InvalidTropModel); /// Compute and return the mapping function for dry component /// of the troposphere /// @param elevation Elevation of satellite as seen at receiver, in degrees virtual double dry_mapping_function(double elevation) const throw(InvalidTropModel); /// Compute and return the mapping function for wet component /// of the troposphere /// @param elevation Elevation of satellite as seen at receiver, in degrees virtual double wet_mapping_function(double elevation) const throw(InvalidTropModel); /// Re-define the tropospheric model with explicit weather data. /// Typically called initially, and whenever the weather changes. /// @param T temperature in degrees Celsius /// @param P atmospheric pressure in millibars /// @param H relative humidity in percent virtual void setWeather(const double& T, const double& P, const double& H) throw(InvalidParameter); /// Re-define the tropospheric model with explicit weather data. /// Typically called just before correction(). /// @param wx the weather to use for this correction virtual void setWeather(const WxObservation& wx) throw(InvalidParameter); private: double Cdrydelay; double Cwetdelay; double Cdrymap; double Cwetmap; }; // end class GGTropModel //--------------------------------------------------------------------------------- /** Tropospheric model with heights based on Goad and Goodman(1974), * "A Modified Hopfield Tropospheric Refraction Correction Model," Paper * presented at the Fall Annual Meeting of the American Geophysical Union, * San Francisco, December 1974. * * (Not the same as GGTropModel because this has height dependence, and the * computation of this model does not break cleanly into wet and dry components.) * * NB this model requires heights, both of the weather parameters, * and of the receiver. * Thus, usually, caller will set heights at the same time the weather is set: * * @code * GGHeightTropModel ggh; * ggh.setWeather(T,P,H); * ggh.setHeights(hT,hP,hH); * @endcode * * and when the correction (and/or delay and map) is computed, * receiver height is set before the call to correction(elevation): * * @code * ggh.setReceiverHeight(height); * trop = ggh.correction(elevation); * @endcode * * NB setReceiverHeight(ht) sets the 'weather heights' as well, if they are not * already defined. */ class GGHeightTropModel : public TropModel { public: /// Empty constructor GGHeightTropModel(void); /// Creates a trop model, with weather observation input /// @param wx the weather to use for this correction. GGHeightTropModel(const WxObservation& wx) throw(InvalidParameter); /// Create a tropospheric model from explicit weather data /// @param T temperature in degrees Celsius /// @param P atmospheric pressure in millibars /// @param H relative humidity in percent GGHeightTropModel(const double& T, const double& P, const double& H) throw(InvalidParameter); /// Create a valid model from explicit input. /// @param T temperature in degrees Celsius /// @param P atmospheric pressure in millibars /// @param H relative humidity in percent /// @param hT height at which temperature applies in meters. /// @param hP height at which atmospheric pressure applies in meters. /// @param hH height at which relative humidity applies in meters. GGHeightTropModel(const double& T, const double& P, const double& H, const double hT, const double hP, const double hH) throw(InvalidParameter); /// Compute and return the full tropospheric delay /// @param elevation Elevation of satellite as seen at receiver, in degrees virtual double correction(double elevation) const throw(InvalidTropModel); /** * Compute and return the full tropospheric delay, given the positions of * receiver and satellite and the time tag. This version is most useful * within positioning algorithms, where the receiver position and timetag * may vary; it computes the elevation (and other receiver location * information) and passes them to appropriate set...() routines and the * correction(elevation) routine. * @param RX Receiver position * @param SV Satellite position * @param tt Time tag of the signal */ virtual double correction(const Position& RX, const Position& SV, const DayTime& tt) throw(InvalidTropModel); /** \deprecated * Compute and return the full tropospheric delay, given the positions of * receiver and satellite and the time tag. This version is most useful * within positioning algorithms, where the receiver position and timetag * may vary; it computes the elevation (and other receiver location * information) and passes them to appropriate set...() routines and the * correction(elevation) routine. * @param RX Receiver position in ECEF cartesian coordinates (meters) * @param SV Satellite position in ECEF cartesian coordinates (meters) * @param tt Time tag of the signal */ virtual double correction(const Xvt& RX, const Xvt& SV, const DayTime& tt) throw(InvalidTropModel); /// Compute and return the zenith delay for dry component /// of the troposphere virtual double dry_zenith_delay(void) const throw(InvalidTropModel); /// Compute and return the zenith delay for wet component of the troposphere virtual double wet_zenith_delay(void) const throw(InvalidTropModel); /// Compute and return the mapping function for dry component of /// the troposphere. /// @param elevation Elevation of satellite as seen at receiver, in degrees virtual double dry_mapping_function(double elevation) const throw(InvalidTropModel); /// Compute and return the mapping function for wet component of /// the troposphere. /// @param elevation Elevation of satellite as seen at receiver, in degrees virtual double wet_mapping_function(double elevation) const throw(InvalidTropModel); /// Re-define the weather data. /// Typically called initially, and whenever the weather changes. /// @param T temperature in degrees Celsius /// @param P atmospheric pressure in millibars /// @param H relative humidity in percent virtual void setWeather(const double& T, const double& P, const double& H) throw(InvalidParameter); /// Re-define the tropospheric model with explicit weather data. /// Typically called just before correction(). /// @param wx the weather to use for this correction virtual void setWeather(const WxObservation& wx) throw(InvalidParameter); /// Re-define the heights at which the weather parameters apply. /// Typically called whenever setWeather is called. /// @param hT height at which temperature applies in meters. /// @param hP height at which atmospheric pressure applies in meters. /// @param hH height at which relative humidity applies in meters. void setHeights(const double& hT, const double& hP, const double& hH); /// Define the receiver height; this required before calling /// correction() or any of the zenith_delay or mapping_function routines. void setReceiverHeight(const double& ht); private: double height; // height (m) of the receiver double htemp; // height (m) at which temp applies double hpress; // height (m) at which press applies double hhumid; // height (m) at which humid applies bool validWeather; bool validHeights; bool validRxHeight; }; // end class GGHeightTropModel //--------------------------------------------------------------------------------- /** Tropospheric model developed by University of New Brunswick and described in * "A Tropospheric Delay Model for the User of the Wide Area Augmentation * System," J. Paul Collins and Richard B. Langley, Technical Report No. 187, * Dept. of Geodesy and Geomatics Engineering, University of New Brunswick, * 1997. See particularly Appendix C. * * This model includes a wet and dry component, and was designed for the user * without access to measurements of temperature, pressure and relative humidity * at ground level. Input of the receiver latitude, day of year and height * above the ellipsoid are required, because the mapping functions depend on * these quantities. In addition, if the weather (T,P,H) are not explicitly * provided, this model interpolates a table of values, using latitude and day * of year, to get the ground level weather parameters. * * Usually, the caller will set the latitude and day of year at the same * time the weather is set (if weather is available): * * @code * NBTropModel nb; * nb.setReceiverLatitude(lat); * nb.setDayOfYear(doy); * nb.setWeather(T,P,H); // OPTIONAL * @endcode * * Then, when the correction (and/or delay and map) is computed, receiver height * should be set before the call to correction(elevation):
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -