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

📄 extractdata.hpp

📁 一个gps小工具包
💻 HPP
字号:
/** * @file ExtractData.hpp * This is the base class to ease data extraction from a RinexObsData object. */#ifndef ExtractData_GPSTK#define ExtractData_GPSTK//============================================================================////  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. 2006////============================================================================#include "Exception.hpp"#include "RinexObsHeader.hpp"#include "RinexObsData.hpp"#include "CheckPRData.hpp"#include "Vector.hpp"namespace gpstk{    /// Thrown when some problem appeared when extracting data    /// @ingroup exceptiongroup    NEW_EXCEPTION_CLASS(InvalidData, gpstk::Exception);    /** @addtogroup RinexObs */    //@{    /// This is the base class to ease data extraction from a RinexObsData object.    class ExtractData    {    public:        /// Return validity of data        inline bool isValid(void)            { return valid; }        /// Number of satellites with available data        int numSV;        /// Vector with the PRN of satellites with available data.        Vector<SatID> availableSV;        /// Vector holding the available data        Vector<double> obsData;        /// Default constructor        ExtractData() throw(InvalidData) : checkData(true), valid(false), minPRange(15000000.0), maxPRange(30000000.0) {};        /** Pull out the selected observation type from a RinexObsData object         * @param rinexData     The Rinex data set holding the observations         * @param typeObs       The type of observation we want to get         *         * @return         *  Number of satellites with this kind of data available         */        inline virtual int getData(const RinexObsData& rinexData, RinexObsHeader::RinexObsType typeObs) throw(InvalidData)        {        try {            // Let's make sure each time we start with clean Vectors            availableSV.resize(0);            obsData.resize(0);            // Create a CheckPRData object with the given limits            CheckPRData checker(minPRange, maxPRange);            // Let's define the "it" iterator to visit the observations PRN map            // RinexSatMap is a map from SatID to RinexObsTypeMap:             //      std::map<SatID, RinexObsTypeMap>            RinexObsData::RinexSatMap::const_iterator it;            for (it = rinexData.obs.begin(); it!= rinexData.obs.end(); it++)             {                // RinexObsTypeMap is a map from RinexObsType to RinexDatum:                //   std::map<RinexObsHeader::RinexObsType, RinexDatum>                RinexObsData::RinexObsTypeMap otmap;                // Let's define a iterator to visit the observations type map                RinexObsData::RinexObsTypeMap::const_iterator itObs1;                // The "second" field of a RinexSatMap (it) is a RinexObsTypeMap (otmap)                otmap = (*it).second;                // Let's find the observation type inside the RinexObsTypeMap that is "otmap"                itObs1 = otmap.find(typeObs);                // Let's check if we found this type of observation and it is between the limits                if ( (itObs1!=otmap.end()) && ( (checker.check((*itObs1).second.data)) || !(checkData) ) )                {                    // Store all relevant data of this epoch                    availableSV = availableSV && (*it).first;                    obsData = obsData && (*itObs1).second.data;                }            } // End of data extraction from this epoch        }        catch(...) {            InvalidData e("Unable to get data from RinexObsData object");            GPSTK_THROW(e);        }        // Let's record the number of SV with this type of data available        numSV = (int)obsData.size();        // If everything is fine so far, then the results should be valid        valid = true;        return numSV;        };  // end ExtractData::getData()        /// Set this to true if you want to enable data checking within given boundaries (default for code measurements)        bool checkData;        /// Set the minimum pseudorange value allowed for data (in meters).        virtual void setMinPRange(const double minPR) { minPRange = minPR; };        /// Get the minimum pseudorange value allowed for data (in meters).        virtual double getMinPRange(void) { return minPRange; };        /// Set the maximum pseudorange value allowed for data (in meters).        virtual void setMaxPRange(const double maxPR) { maxPRange = maxPR; };        /// Get the minimum pseudorange value allowed for data (in meters).        virtual double getMaxPRange(void) { return maxPRange; };        /// Destructor        inline virtual ~ExtractData() {};    protected:        /// True only if results are valid        bool valid;        /// Minimum pseudorange value allowed for input data (in meters).        double minPRange;        /// Maximum pseudorange value allowed for input data (in meters).        double maxPRange;   }; // end class ExtractData      //@}   }#endif

⌨️ 快捷键说明

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