⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basicmodel.hpp

📁 一个gps小工具包
💻 HPP
字号:
#pragma ident "$Id: $"/** * @file BasicModel.hpp * This is a class to compute the basic parts of a GNSS model, i.e.: * Geometric distance, relativity correction, satellite position at * transmission time, satellite elevation and azimuth, etc. */#ifndef BASICMODEL_HPP#define BASICMODEL_HPP//============================================================================////  This file is part of GPSTk, the GPS Toolkit.////  The GPSTk is free software; you can redistribute it and/or modify//  it under the terms of the GNU Lesser General Public License as published//  by the Free Software Foundation; either version 2.1 of the License, or//  any later version.////  The GPSTk is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU Lesser General Public License for more details.////  You should have received a copy of the GNU Lesser General Public//  License along with GPSTk; if not, write to the Free Software Foundation,//  Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA//  //  Dagoberto Salazar - gAGE ( http://www.gage.es ). 2007////============================================================================#include "ProcessingClass.hpp"#include "EphemerisRange.hpp"#include "EngEphemeris.hpp"#include "XvtStore.hpp"#include "GPSEphemerisStore.hpp"namespace gpstk{      /** @addtogroup GPSsolutions */      //@{      /** This is a class to compute the basic parts of a GNSS model, i.e.:       * Geometric distance, relativity correction, satellite position at       * transmission time, satellite elevation and azimuth, etc.       *       * This class is intended to be used with GNSS Data Structures (GDS).       * It is a more modular alternative to classes such as ModelObs       * and ModelObsFixedStation.       *       * A typical way to use this class follows:       *       * @code       *   // Input observation file stream       *   RinexObsStream rin("ebre0300.02o");       *   // Load the precise ephemeris file       *   SP3EphemerisStore sp3Eph;       *   sp3Eph.loadFile("igs11513.sp3");       *   // Reference position of receiver station       *   Position nominalPos(4833520.2269, 41537.00768, 4147461.489);       *       *   // Some more code and definitions here...       *       *   gnssRinex gRin;  // GNSS data structure for fixed station data       *       *   // Set defaults of models. A typical C1-based modeling is used       *   BasicModel model( nominalPos, sp3Eph);       *       *   while(rin >> gRin)       *   {       *       *         // Apply the model on the GDS       *      gRin >> model;       *   }       *       * @endcode       *       * The "BasicModel" object will visit every satellite in       * the GNSS data structure that is "gRin" and will try to compute       * its model: Geometric distance, relativity delay, satellite position       * at transmission time, satellite elevation and azimuth, etc.       *       * When used with the ">>" operator, this class returns the same       * incoming data structure with the extra data inserted along their       * corresponding satellites. Be warned that if a given satellite does       * not have ephemeris information, it will be summarily deleted       * from the data structure.       *       * @sa ModelObs.hpp and ModelObsFixedStation.hpp for classes carrying       * out a more complete model.       *       */   class BasicModel : public ProcessingClass   {   public:         /// Default constructor. Observable C1 will be used for computations         /// and satellites with elevation less than 10 degrees will be         /// deleted.      BasicModel()         throw(Exception)         : minElev(10.0), pDefaultEphemeris(NULL),           defaultObservable(TypeID::C1), useTGD(false)      { setInitialRxPosition(); setIndex(); };         /** Explicit constructor taking as input reference           *  station coordinates.          *          * Those coordinates may be Cartesian (X, Y, Z in meters) or Geodetic          * (Latitude, Longitude, Altitude), but defaults to Cartesian.           *          * Also, a pointer to GeoidModel may be specified, but default is          * NULL (in which case WGS84 values will be used).          *          * @param aRx   first coordinate [ X(m), or latitude (degrees N) ]          * @param bRx   second coordinate [ Y(m), or longitude (degrees E) ]          * @param cRx   third coordinate [ Z, height above ellipsoid or           *              radius, in meters ]          * @param s     coordinate system (default is Cartesian, may be set          *              to Geodetic).          * @param geoid pointer to GeoidModel (default is null, implies WGS84)          */      BasicModel( const double& aRx,                  const double& bRx,                  const double& cRx,                   Position::CoordinateSystem s = Position::Cartesian,                  GeoidModel *geoid = NULL )         throw(Exception);         /// Explicit constructor, taking as input a Position object         /// containing reference station coordinates.      BasicModel(const Position& RxCoordinates)         throw(Exception);         /** Explicit constructor, taking as input reference station          *  coordinates, ephemeris to be used and whether TGD will          *  be computed or not.          *          * @param RxCoordinates Reference station coordinates.          * @param dEphemeris    EphemerisStore object to be used by default.          * @param dObservable   Observable type to be used by default.          * @param applyTGD      Whether or not C1 observable will be          *                      corrected from TGD effect.          *          */      BasicModel( const Position& RxCoordinates,                  XvtStore<SatID>& dEphemeris,                  const TypeID& dObservable = TypeID::C1,                  const bool& applyTGD = false )         throw(Exception);         /** Returns a satTypeValueMap object, adding the new data generated          *  when calling a modeling object.          *          * @param time      Epoch.          * @param gData     Data object holding the data.          */      virtual satTypeValueMap& Process( const DayTime& time,                                        satTypeValueMap& gData )         throw(Exception);         /** Returns a gnnsSatTypeValue object, adding the new data generated          *  when calling a modeling object.          *          * @param gData    Data object holding the data.          */      virtual gnssSatTypeValue& Process(gnssSatTypeValue& gData)         throw(Exception)      { Process(gData.header.epoch, gData.body); return gData; };         /** Returns a gnnsRinex object, adding the new data generated when          *  calling a modeling object.          *          * @param gData    Data object holding the data.          */      virtual gnssRinex& Process(gnssRinex& gData)         throw(Exception)      { Process(gData.header.epoch, gData.body); return gData; };         /// Method to get satellite elevation cut-off angle. By default, it         /// is set to 10 degrees.      virtual double getMinElev() const      { return minElev; };         /// Method to set satellite elevation cut-off angle. By default, it         /// is set to 10 degrees.      virtual BasicModel& setMinElev(double newElevation)      { minElev = newElevation; return (*this); };         /// Method to get the default observable for computations.      virtual TypeID getDefaultObservable() const      { return defaultObservable; };         /** Method to set the default observable for computations.          *          * @param type      TypeID object to be used by default          */      virtual BasicModel& setDefaultObservable(const TypeID& type)      { defaultObservable = type; return (*this); };         /// Method to get a pointer to the default XvtStore<SatID> to be used         /// with GNSS data structures.      virtual XvtStore<SatID>* getDefaultEphemeris() const      { return pDefaultEphemeris; };         /** Method to set the default XvtStore<SatID> to be used with GNSS          *  data structures.          *          * @param ephem     XvtStore<SatID> object to be used by default          */      virtual BasicModel& setDefaultEphemeris(XvtStore<SatID>& ephem)      { pDefaultEphemeris = &ephem; return (*this); };         /// Either estimated or "a priori" position of receiver      Position rxPos;         /// Returns an index identifying this object.      virtual int getIndex(void) const;         /// Returns a string identifying this object.      virtual std::string getClassName(void) const;         /** Sets the index to a given arbitrary value. Use with caution.          *          * @param newindex      New integer index to be assigned to          *                      current object.          */      BasicModel& setIndex(const int newindex)      { index = newindex; return (*this); };         /// Destructor.      virtual ~BasicModel() {};   protected:         /** Compute the modeled pseudoranges, given satellite ID's,          *  pseudoranges and other data.          *          * @param Tr            Measured time of reception of the data.          * @param Satellite     Vector of satellites.          * @param Pseudorange   Vector of raw pseudoranges (parallel to          *                      satellite), in meters.          * @param Eph           EphemerisStore to be used.          *          * @return          *  Number of satellites with valid data          *          * @sa TropModel.hpp, IonoModelStore.hpp.          */      int Compute( const DayTime& Tr,                   Vector<SatID>& Satellite,                   Vector<double>& Pseudorange,                   const XvtStore<SatID>& Eph )         throw(Exception);         /// The elevation cut-off angle for accepted satellites.         /// By default it is set to 10 degrees.      double minElev;         /// Pointer to default XvtStore<SatID> object when working with GNSS         /// data structures.      XvtStore<SatID>* pDefaultEphemeris;         /// Default observable to be used when fed with GNSS data structures.      TypeID defaultObservable;         /// Whether the TGD effect will be applied to C1 observable or not.      bool useTGD;         /** Method to set the initial (a priori) position of receiver.          * @return          *  0 if OK          *  -1 if problems arose          */      virtual int setInitialRxPosition( const double& aRx,                                        const double& bRx,                                        const double& cRx,                            Position::CoordinateSystem s = Position::Cartesian,                                        GeoidModel *geoid = NULL )         throw(GeometryException);         /// Method to set the initial (a priori) position of receiver.      virtual int setInitialRxPosition(const Position& RxCoordinates)         throw(GeometryException);         /// Method to set the initial (a priori) position of receiver.      virtual int setInitialRxPosition()         throw(GeometryException);         /// Method to get TGD corrections.      virtual double getTGDCorrections( DayTime Tr,                                        const XvtStore<SatID>& Eph,                                        SatID sat )         throw();   private:         /// Initial index assigned to this class.      static int classIndex;         /// Index belonging to this object.      int index;         /// Sets the index and increment classIndex.      void setIndex(void)      { index = classIndex++; };   }; // class BasicModel      //@}} // namespace#endif // BASICMODEL_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -