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

📄 computemopsweights.hpp

📁 一个gps小工具包
💻 HPP
字号:
#pragma ident "$Id: $"/** * @file ComputeMOPSWeights.hpp * This class computes satellites weights based on the Appendix J of MOPS C, * and is meant to be used with GNSS data structures. */#ifndef COMPUTEMOPSWEIGHTS_HPP#define COMPUTEMOPSWEIGHTS_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 ). 2006, 2007////============================================================================#include "DayTime.hpp"#include "DataStructures.hpp"#include "WeightBase.hpp"#include "EngEphemeris.hpp"#include "TabularEphemerisStore.hpp"#include "GPSEphemerisStore.hpp"#include "ComputeIURAWeights.hpp"#include "TropModel.hpp"#include "geometry.hpp"             // DEG_TO_RADnamespace gpstk{      /** @addtogroup DataStructures */      //@{      /** This class computes satellites weights based on the Appendix J       *  of MOPS C.       *       * It is meant to be used with the GNSS data structures objects       * found in "DataStructures" class.       *       * A typical way to use this class follows:       *       * @code       *   RinexObsStream rin("ebre0300.02o");       *   RinexNavStream rnavin("brdc0300.02n");       *   RinexNavData rNavData;       *   GPSEphemerisStore bceStore;       *   while (rnavin >> rNavData) bceStore.addEphemeris(rNavData);       *   bceStore.SearchPast();  // This is the default       *       *   RinexNavHeader rNavHeader;       *   IonoModelStore ionoStore;       *   IonoModel ioModel;       *   rnavin >> rNavHeader;       *   ioModel.setModel(rNavHeader.ionAlpha, rNavHeader.ionBeta);       *   ionoStore.addIonoModel(DayTime::BEGINNING_OF_TIME, ioModel);       *       *   Position nominalPos(4833520.2269, 41537.00768, 4147461.489);       *       *   MOPSTropModel mopsTM;       *   mopsTM.setReceiverHeight(nominalPos.getAltitude());       *   mopsTM.setReceiverLatitude(nominalPos.getGeodeticLatitude());       *   mopsTM.setDayOfYear(30);    // Day of the year       *       *   ModeledPR modelRef( nominalPos,       *                       ionoStore,       *                       mopsTM,       *                       bceStore,       *                       TypeID::C1,       *                       true );       *       *   gnssRinex gRin;       *   ComputeMOPSWeights mopsW(nominalPos, bceStore);       *       *   while(rin >> gRin) {       *      gRin >> modelRef >> mopsW;       *   }       * @endcode       *       * The "ComputeMOPSWeights" object will visit every satellite in the       * GNSS data structure that is "gRin" and will try to compute its weight       * based on the MOPS algorithm.       *       * It is very important to note that MOPS algorithm demands a proper       * modeling  of the observable before starting, otherwise it won't work.       * That is the reason of the long initialization phase, where the       * ionospheric model (ionoStore), the MOPS tropospheric model (mopsTM)       * and the general model (modelRef) objects are set up.       *       * When used with the ">>" operator, this class returns the same incoming       * data structure with the weights inserted along their corresponding       * satellites. Be warned that if it is not possible to compute the       * weight for a given satellite, it will be summarily deleted from       * the data structure.       *       */   class ComputeMOPSWeights : public ComputeIURAWeights   {   public:         /// Default constructor. Generates an invalid object.      ComputeMOPSWeights() : receiverClass(2)      { pBCEphemeris = NULL; pTabEphemeris = NULL; setIndex(); }         /** Common constructor          *          * @param pos       Reference position.          * @param bcephem   GPSEphemerisStore object holding the ephemeris.          * @param rxClass   Receiver class. By default, it is 2.          */      ComputeMOPSWeights( const Position& pos,                          GPSEphemerisStore& bcephem,                          int rxClass = 2 )         : receiverClass(rxClass), nominalPos(pos)      { setDefaultEphemeris(bcephem); setIndex(); };         /** Common constructor          *          * @param pos       Reference position.          * @param tabephem  TabularEphemerisStore object holding the          *                  ephemeris.          * @param rxClass   Receiver class. By default, it is 2.          */      ComputeMOPSWeights( const Position& pos,                          TabularEphemerisStore& tabephem,                          int rxClass = 2 )         : receiverClass(rxClass), nominalPos(pos)      { setDefaultEphemeris(tabephem); setIndex(); };         /** Returns a satTypeValueMap object, adding the new data          *  generated when calling this object.          *          * @param time      Epoch corresponding to the data.          * @param gData     Data object holding the data.          */      virtual satTypeValueMap& Process( const DayTime& time,                                        satTypeValueMap& gData );         /** Returns a gnnsSatTypeValue object, adding the new data          *  generated when calling this object.          *          * @param gData    Data object holding the data.          */      virtual gnssSatTypeValue& Process(gnssSatTypeValue& gData);         /** Returns a gnnsRinex object, adding the new data generated          *  when calling this object.          *          * @param gData    Data object holding the data.          */      virtual gnssRinex& Process(gnssRinex& gData);         /** Method to set the default ephemeris to be used with          *  GNSS data structures.          *          * @param ephem     TabularEphemerisStore object to be used          */      virtual void setPosition(const Position& pos)      { nominalPos = pos; };         /// 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.          */      void setIndex(const int newindex)      { index = newindex; };         /// Destructor      virtual ~ComputeMOPSWeights() {};   private:         /// Default receiver class (the usual value is 2).      int receiverClass;         /// Nominal position used for computing weights.      Position nominalPos;         /** Method to really get the MOPS weight of a given satellite.          *          * @param sat           Satellite          *          */      virtual double getWeight( const SatID& sat,                                typeValueMap& tvMap )         throw(InvalidWeights);         // Compute ionospheric sigma^2 according to Appendix J.2.3         // and Appendix A.4.4.10.4 in MOPS-C      double sigma2iono( const double& ionoCorrection,                         const double& elevation,                         const double& azimuth,                         const Position& rxPosition )         throw(InvalidWeights);         /// 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++; };    }; // end class ComputeMOPSWeights      //@}   }#endif  // COMPUTEMOPSWEIGHTS_HPP

⌨️ 快捷键说明

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