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

📄 typeid.hpp

📁 gps源代码
💻 HPP
字号:
#pragma ident "$Id$"//============================================================================////  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////============================================================================#ifndef GPSTK_TYPEID_HPP#define GPSTK_TYPEID_HPP#include <iostream>#include <iomanip>#include <sstream>#include <string>#include <map>#include "RinexObsHeader.hpp"/** * @file TypeID.hpp * gpstk::TypeID - This class was written taking as inspiration ObsID. The   objective of this class is to create an index able to represent any type    of observation, correction, model parameter or other data value of interest    for GNSS data processing. This class is extensible in run-time, so the    programmer may add indexes on-demand. */namespace gpstk{   /**    * This class creates an index able to represent any type of observation,    * correction, model parameter or other data value of interest for GNSS     * data processing.    *    * This class is exensible in run-time, so the programmer may add     * indexes on-demand. For instance, in order to create a new TypeID object    * referring INS-related data, and with "ins" as description string,    * you may write the following:    *    * @code    *    TypeID INS = TypeID::newValueType("ins");    * @endcode    *    * Or using the constructor:    *    * @code    *    TypeID INS(TypeID::newValueType("ins"));    * @endcode    *    * From now on, you'll be able to use INS as TypeID when you need to    * refer to inertial system data.    *    */   class TypeID   {   public:      /// The type of the data value.      enum ValueType      {         Unknown,         // Observation-related types         C1,        ///< GPS civil code observation in L1 frequency         C2,        ///< GPS civil code observation in L2 frequency         P1,        ///< GPS precise code observation in L1 frequency         P2,        ///< GPS precise code observation in L2 frequency         L1,        ///< GPS phase observation in L1 frequency         L2,        ///< GPS phase observation in L2 frequency         D1,        ///< GPS doppler observation in L1 frequency         D2,        ///< GPS doppler observation in L2 frequency         S1,        ///< GPS signal strength observation in L1 frequency         S2,        ///< GPS signal strength observation in L2 frequency         T1,        ///< Transit integrated doppler observation in L1 frequency         T2,        ///< Transit integrated doppler observation in L2 frequency         SSI1,      ///< Signal strength indicator/index, L1 frequency         LLI1,      ///< Loss of Lock Indicator/ lock count, L1 frequency         SSI2,      ///< Signal strength indicator/index, L2 frequency         LLI2,      ///< Loss of Lock Indicator/ lock count, L2 frequency         // v 2.11         C5,        ///< GPS L5C-code pseudorange         L5,        ///< GPS phase observation in L5 frequency         D5,        ///< GPS doppler observation in L5 frequency         S5,        ///< GPS signal strength observation in L5 frequency         SSI5,      ///< Signal strength indicator/index, L5 frequency         LLI5,      ///< Loss of Lock Indicator/ lock count, L5 frequency         // Galileo-related         C6,        ///< Galileo E6-code pseudorange         L6,        ///< Galileo phase observation in L6 frequency         D6,        ///< Galileo doppler observation in L6 frequency         S6,        ///< Galileo signal strength observation in L6 frequency         SSI6,      ///< Signal strength indicator/index, L6 frequency         LLI6,      ///< Loss of Lock Indicator/ lock count, L6 frequency         C7,        ///< Galileo E5b-code pseudorange         L7,        ///< Galileo phase observation in L5b frequency         D7,        ///< Galileo doppler observation in L5b frequency         S7,        ///< Galileo signal strength observation in L5b frequency         SSI7,      ///< Signal strength indicator/index, L5b frequency         LLI7,      ///< Loss of Lock Indicator/ lock count, L5b frequency         C8,        ///< Galileo E5a+b-code pseudorange         L8,        ///< Galileo phase observation in L5a+b frequency         D8,        ///< Galileo doppler observation in L5a+b frequency         S8,        ///< Galileo signal strength observation in L5a+b frequency         SSI8,      ///< Signal strength indicator/index, L5a+b frequency         LLI8,      ///< Loss of Lock Indicator/ lock count, L5a+b frequency         // Combination-related types         PC,        ///< Code-based ionosphere-free combination         LC,        ///< Phase-based ionosphere-free combination         PI,        ///< Code-based ionospheric combination         LI,        ///< Phase-based ionospheric combination         Pdelta,    ///< Narrow-lane combination         Ldelta,    ///< Wide-lane combination         MWubbena,  ///< Melbourne-Wubbena combination         // Model-related types         rho,       ///< Geometric distance satellite-receiver         dtSat,     ///< Satellite clock offset         rel,       ///< Relativistic delay         tropo,     ///< Vertical tropospheric delay, total         dryTropo,  ///< Vertical tropospheric delay, dry component         wetTropo,  ///< Vertical tropospheric delay, wet component         tropoSlant, ///< Slant tropospheric delay, total         iono,      ///< Vertical ionospheric delay         ionoSlant, ///< Slant ionospheric delay         windUp,    ///< Wind-up effect (in radians)         satX,      ///< Satellite position, X component         satY,      ///< Satellite position, Y component         satZ,      ///< Satellite position, Z component         elevation, ///< Satellite elevation         azimuth,   ///< Satellite azimuth         // Cycle slip flags         CSL1,      ///< Cycle slip in L1         CSL2,      ///< Cycle slip in L2         CSL5,      ///< Cycle slip in L5         CSL6,      ///< Cycle slip in L6         CSL7,      ///< Cycle slip in L7         CSL8,      ///< Cycle slip in L8         // Phase-ambiguity types         BL1,       ///< Phase ambiguity in L1         BL2,       ///< Phase ambiguity in L2         BL5,       ///< Phase ambiguity in L5         BL6,       ///< Phase ambiguity in L6         BL7,       ///< Phase ambiguity in L7         BL8,       ///< Phase ambiguity in L8         // Multipath-related types         mpC1,      ///< Multipath bias, C1         mpC2,      ///< Multipath bias, C2         mpC5,      ///< Multipath bias, C5         mpC6,      ///< Multipath bias, C6         mpC7,      ///< Multipath bias, C7         mpC8,      ///< Multipath bias, C8         mpL1,      ///< Multipath bias, L1         mpL2,      ///< Multipath bias, L2         mpL5,      ///< Multipath bias, L5         mpL6,      ///< Multipath bias, L6         mpL7,      ///< Multipath bias, L7         mpL8,      ///< Multipath bias, L8         // Instrumental delays types         instC1,    ///< Instrumental delay, C1         instC2,    ///< Instrumental delay, C2         instC5,    ///< Instrumental delay, C5         instC6,    ///< Instrumental delay, C6         instC7,    ///< Instrumental delay, C7         instC8,    ///< Instrumental delay, C8         instL1,    ///< Instrumental delay, L1         instL2,    ///< Instrumental delay, L2         instL5,    ///< Instrumental delay, L5         instL6,    ///< Instrumental delay, L6         instL7,    ///< Instrumental delay, L7         instL8,    ///< Instrumental delay, L8         // Equation system-related types         prefitC,   ///< Prefit residual, code         prefitL,   ///< Prefit residual, phase         postfitC,  ///< Postfit residual, code         postfitL,  ///< Postfit residual, phase         dx,        ///< In the position domain: Position bias, X component; in the range domain: dx coefficient         dy,        ///< In the position domain: Position bias, Y component; in the range domain: dy coefficient         dz,        ///< In the position domain: Position bias, Z component; in the range domain: dz coefficient         dLat,      ///< Position bias, Latitude component         dLon,      ///< Position bias, Longitude component         dH,        ///< Position bias, Height component         cdt,       ///< In the position domain: Receiver clock offset, meters; in the range domain: cdt coefficient         weight,    ///< Weight assigned to a given observation         // Other types         recX,      ///< Receiver position, X component         recY,      ///< Receiver position, Y component         recZ,      ///< Receiver position, Z component         recLat,    ///< Receiver position, Latitude component         recLon,    ///< Receiver position, Longitude component         recH,      ///< Receiver position, Height component         sigma,     ///< Standard deviation         iura,      ///< Index User Range Accuracy         Last,      ///< used to extend this...         Placeholder = Last+1000      };      /// empty constructor, creates an invalid object      TypeID()         : type(Unknown) {};      /// Explicit constructor      TypeID(ValueType vt)         : type(vt) {};      /// Equality requires all fields to be the same      virtual bool operator==(const TypeID& right) const      { return type==right.type; }      /// This ordering is somewhat arbitrary but is required to be able      /// to use an TypeID as an index to a std::map. If an application needs      /// some other ordering, inherit and override this function.      virtual bool operator<(const TypeID& right) const      { return type < right.type; }      bool operator!=(const TypeID& right) const      { return !(operator==(right)); }      bool operator>(const TypeID& right) const      {  return (!operator<(right) && !operator==(right)); }      bool operator<=(const TypeID& right) const      { return (operator<(right) || operator==(right)); }      bool operator>=(const TypeID& right) const      { return !(operator<(right)); }      /// Assignment operator      virtual TypeID operator=(const TypeID& right)      {        if ( this == &right ) return (*this);        (*this).type = right.type;        return *this;      }      /// Convenience output method      virtual std::ostream& dump(std::ostream& s) const;      /// Returns true if this is a valid TypeID. Basically just      /// checks that the enum is defined      virtual bool isValid() const;      /// Destructor      virtual ~TypeID() {}      /** Static method to add new TypeID's       * @param string      Identifying string for the new TypeID       */      static ValueType newValueType(const std::string& s);      /// Type of the value      ValueType  type;      static std::map< ValueType, std::string > tStrings;   public:      class Initializer      {      public:         Initializer();      };      static Initializer TypeIDsingleton;   }; // class TypeID   namespace StringUtils   {      /// convert this object to a string representation      std::string asString(const TypeID& p);   }      /// stream output for TypeID   std::ostream& operator<<(std::ostream& s, const TypeID& p);   /// Conversion from RinexObsType to TypeID   inline TypeID::ValueType RinexType2TypeID(const RinexObsHeader::RinexObsType& rot)   {        if (rot == RinexObsHeader::UN) return TypeID::Unknown;        if (rot == RinexObsHeader::C1) return TypeID::C1;        if (rot == RinexObsHeader::C2) return TypeID::C2;        if (rot == RinexObsHeader::P1) return TypeID::P1;        if (rot == RinexObsHeader::P2) return TypeID::P2;        if (rot == RinexObsHeader::L1) return TypeID::L1;        if (rot == RinexObsHeader::L2) return TypeID::L2;        if (rot == RinexObsHeader::D1) return TypeID::D1;        if (rot == RinexObsHeader::D2) return TypeID::D2;        if (rot == RinexObsHeader::S1) return TypeID::S1;        if (rot == RinexObsHeader::S2) return TypeID::S2;        // v 2.11        if (rot == RinexObsHeader::C5) return TypeID::C5;        if (rot == RinexObsHeader::L5) return TypeID::L5;        if (rot == RinexObsHeader::D5) return TypeID::D5;        if (rot == RinexObsHeader::S5) return TypeID::S5;        // Galileo-related        if (rot == RinexObsHeader::C6) return TypeID::C6;        if (rot == RinexObsHeader::L6) return TypeID::L6;        if (rot == RinexObsHeader::D6) return TypeID::D6;        if (rot == RinexObsHeader::S6) return TypeID::S6;        if (rot == RinexObsHeader::C7) return TypeID::C7;        if (rot == RinexObsHeader::L7) return TypeID::L7;        if (rot == RinexObsHeader::D7) return TypeID::D7;        if (rot == RinexObsHeader::S7) return TypeID::S7;        if (rot == RinexObsHeader::C8) return TypeID::C8;        if (rot == RinexObsHeader::L8) return TypeID::L8;        if (rot == RinexObsHeader::D8) return TypeID::D8;        if (rot == RinexObsHeader::S8) return TypeID::S8;        // Just in case, but it should never get this far        return TypeID::Unknown;   }} // namespace gpstk#endif

⌨️ 快捷键说明

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