Go to the documentation of this file.
65 std::set<SatelliteSystem> systems;
66 for (
const auto& i :
data)
85 if (systems.size() == 1)
91 else if (systems.size() > 1)
108 cerr <<
"Unable to open \"" << filename <<
"\" for output." << endl;
114 cerr <<
"Failed to write header to \"" << filename <<
"\"." << endl;
122 cerr <<
"Failed to write data to \"" << filename <<
"\"." << endl;
135 std::shared_ptr<StdNavTimeOffset> todPtr;
136 std::shared_ptr<KlobucharIonoNavData> kiPtr;
137 std::shared_ptr<NeQuickIonoNavData> neqiPtr;
138 switch (ndp->signal.messageType)
141 todPtr = std::dynamic_pointer_cast<StdNavTimeOffset>(ndp);
149 if (todPtr->deltatLS > 0)
163 std::dynamic_pointer_cast<KlobucharIonoNavData>(ndp);
174 icA.
param[0] = kiPtr->alpha[0];
175 icA.
param[1] = kiPtr->alpha[1];
176 icA.
param[2] = kiPtr->alpha[2];
177 icA.
param[3] = kiPtr->alpha[3];
179 icB.
param[0] = kiPtr->beta[0];
180 icB.
param[1] = kiPtr->beta[1];
181 icB.
param[2] = kiPtr->beta[2];
182 icB.
param[3] = kiPtr->beta[3];
191 std::dynamic_pointer_cast<NeQuickIonoNavData>(ndp);
201 ic.
param[0] = neqiPtr->ai[0];
202 ic.
param[1] = neqiPtr->ai[1];
203 ic.
param[2] = neqiPtr->ai[2];
257 std::shared_ptr<OrbitDataKepler> odk =
258 std::dynamic_pointer_cast<OrbitDataKepler>(ndp);
264 std::shared_ptr<GPSLNavEph> eph =
265 std::dynamic_pointer_cast<GPSLNavEph>(ndp);
280 rnd.
health = eph->healthBits;
281 rnd.
codeflgs =
static_cast<short>(eph->codesL2);
283 rnd.
IODC = eph->iodc;
284 rnd.
IODE = eph->iode;
301 std::shared_ptr<OrbitDataKepler> odk =
302 std::dynamic_pointer_cast<OrbitDataKepler>(ndp);
308 std::shared_ptr<GalFNavEph> eph =
309 std::dynamic_pointer_cast<GalFNavEph>(ndp);
326 <<
printTime(eph->timeStamp,
" date=%Y/%02m/%02d"));
328 rnd.
IODnav = eph->iodnav1;
336 rnd.
health = ((int)eph->dvsE5a & 0x01) << 3;
337 rnd.
health |= ((int)eph->hsE5a & 0x03) << 4;
343 if (healthGet.
getHealth(sidE1B, eph->timeStamp, healthPtr))
346 auto fnh(std::dynamic_pointer_cast<GalINavHealth>(healthPtr));
351 rnd.
health |= ((int)fnh->dataValidityStatus & 0x01);
352 rnd.
health |= ((int)fnh->sigHealthStatus & 0x03) << 1;
359 if (healthGet.
getHealth(sidE5b, eph->timeStamp, healthPtr))
362 auto fnh(std::dynamic_pointer_cast<GalINavHealth>(healthPtr));
367 rnd.
health |= ((int)fnh->dataValidityStatus & 0x01) << 6;
368 rnd.
health |= ((int)fnh->sigHealthStatus & 0x03) << 7;
371 rnd.
Tgd = eph->bgdE5aE1;
389 std::shared_ptr<OrbitDataKepler> odk =
390 std::dynamic_pointer_cast<OrbitDataKepler>(ndp);
396 std::shared_ptr<GalINavEph> eph =
397 std::dynamic_pointer_cast<GalINavEph>(ndp);
414 <<
printTime(eph->timeStamp,
" date=%Y/%02m/%02d"));
416 rnd.
IODnav = eph->iodnav1;
429 rnd.
health = (int)eph->dvsE1B & 0x01;
430 rnd.
health |= ((
int)eph->hsE1B & 0x03) << 1;
436 if (healthGet.
getHealth(sidE5a, eph->timeStamp, healthPtr))
439 auto fnh(std::dynamic_pointer_cast<GalFNavHealth>(healthPtr));
444 rnd.
health |= ((int)fnh->dataValidityStatus & 0x01) << 3;
445 rnd.
health |= ((int)fnh->sigHealthStatus & 0x03) << 4;
448 rnd.
health |= ((int)eph->dvsE5b & 0x01) << 6;
449 rnd.
health |= ((int)eph->hsE5b & 0x03) << 7;
450 rnd.
Tgd = eph->bgdE5aE1;
451 rnd.
Tgd2 = eph->bgdE5bE1;
466 std::shared_ptr<OrbitDataKepler> odk =
467 std::dynamic_pointer_cast<OrbitDataKepler>(ndp);
473 std::shared_ptr<BDSD1NavEph> eph =
474 std::dynamic_pointer_cast<BDSD1NavEph>(ndp);
488 rnd.
IODE = eph->aode;
489 rnd.
IODC = eph->aodc;
491 if (eph->uraIndex >= 15)
500 rnd.
Tgd2 = eph->tgd2;
514 std::shared_ptr<OrbitDataKepler> odk =
515 std::dynamic_pointer_cast<OrbitDataKepler>(ndp);
521 std::shared_ptr<BDSD2NavEph> eph =
522 std::dynamic_pointer_cast<BDSD2NavEph>(ndp);
536 rnd.
IODE = eph->aode;
537 rnd.
IODC = eph->aodc;
539 if (eph->uraIndex >= 15)
548 rnd.
Tgd2 = eph->tgd2;
562 std::shared_ptr<GLOFNavEph> eph =
563 std::dynamic_pointer_cast<GLOFNavEph>(ndp);
571 rnd.
PRNID = eph->slot;
573 rnd.
TauN = -(eph->clkBias);
574 rnd.
GammaN = eph->freqBias;
580 rnd.
px = eph->pos[0] / 1000.0;
581 rnd.
py = eph->pos[1] / 1000.0;
582 rnd.
pz = eph->pos[2] / 1000.0;
583 rnd.
vx = eph->vel[0] / 1000.0;
584 rnd.
vy = eph->vel[1] / 1000.0;
585 rnd.
vz = eph->vel[2] / 1000.0;
586 rnd.
ax = eph->acc[0] / 1000.0;
587 rnd.
ay = eph->acc[1] / 1000.0;
588 rnd.
az = eph->acc[2] / 1000.0;
589 rnd.
health = (eph->healthBits >> 2) & 1;
590 rnd.
freqNum = eph->signal.obs.freqOffs;
611 rnd.
sat = odk->signal.sat;
633 rnd.
Ahalf = odk->Ahalf;
638 rnd.
idot = odk->idot;
649 toffs->src, toffs->tgt, tsc.
type))
653 tsc.
frTS = toffs->src;
654 tsc.
toTS = toffs->tgt;
672 const auto& hmi = healthMap.find(nsid);
673 if (hmi == healthMap.end())
677 const auto& ndmi = hmi->second.lower_bound(when);
678 if (ndmi == hmi->second.end())
682 healthOut = ndmi->second;
std::shared_ptr< NavData > NavDataPtr
Factories instantiate these in response to find() requests.
double ura2nominalAccuracy(short ura) noexcept
RNDouble fitint
Fit interval.
NavType nav
Navigation message structure of this signal.
Class used to identify/categorize navigation message data.
RNDouble Ahalf
SQRT of semi-major axis (m**1/2)
static bool fillDataGLOFNav(const NavDataPtr &ndp, Rinex3NavData &rnd)
double Toc
Time of clock (sec of week)
std::list< Rinex3NavData > rndList
The data created by translate() to be written.
int id
Satellite identifier, e.g. PRN.
RNDouble Cuc
Cosine latitude (rad)
RNDouble Tgd2
Group delay differential (sec) (BDS:B2/B3 GAL:E5b/E1)
NavSearchOrder order
Parameter to NavLibrary::getHealth()
CommonTime time
Time according to the sat/epoch record (TOC)
@ E1B
Galileo E1-B signal, supporting OS/HAS/SoL.
RNDouble Cic
Cosine inclination (rad)
bool translate(const NavDataPtrList &data, HealthGetter &healthGet)
static double encodeSISA(uint8_t sisa)
std::string satSys
Satellite system of Epoch: G,R,E,S,C.
RNDouble Toe
Ephemeris epoch (sec of week)
bool getHealth(const NavSatelliteID &nsid, const CommonTime &when, NavDataPtr &healthOut) override
RNDouble ecc
Eccentricity.
RNDouble IODC
Index of data-clock.
CommonTime refTime
reference time for polynominal
Rinex3NavHeader header
The header that will be used by translate() and write().
RNDouble af2
SV clock drift rate (sec/sec**2)
@ Any
Used to match any carrier band.
RNDouble i0
Inclination (rad)
@ Health
SV health status information message.
std::list< NavDataPtr > NavDataPtrList
RNDouble OMEGA0
Rt ascension of ascending node (rad)
bool write(const std::string &filename)
RNDouble Crs
Sine radius (m)
NavLibraryHealthGetter(NavLibrary &nl)
std::string asString() const noexcept
Return string version of CorrType.
SVHealth
Identify different types of SV health states.
RNDouble OMEGAdot
Rate of Rt ascension (rad/sec)
NavSearchOrder
Specify the behavior of nav data searches in NavLibrary/NavDataFactory.
RNDouble IODE
Index of data-eph.
RNDouble dn
Correction to mean motion (rad/sec)
static bool fillDataKepler(const std::shared_ptr< OrbitDataKepler > &odk, Rinex3NavData &rnd)
RNDouble Crc
Cosine radius (m)
virtual bool getHealth(const NavSatelliteID &nsid, const CommonTime &when, NavDataPtr &healthOut)
RNDouble ageOfInfo
Age of oper. information (days)
@ E5aI
Galileo E5a I code.
std::string asString4() const
Return 4-char string version of CorrType.
ObsID obs
Carrier, tracking code, etc.
short datasources
Data sources.
short freqNum
Frequency number (-7..+12)
@ ValidOnly
Only load/find nav messages that pass validity checks.
@ Iono
Ionospheric correction data.
long MFtime
Message frame time (sec of UTC week) as long.
RNDouble af1
SV clock drift (sec/sec)
static bool fillData(const NavDataPtr &ndp, Rinex3NavData &rnd, HealthGetter &healthGet)
short L2Pdata
L2 P data flag.
RNDouble Tgd
Group delay diff. (sec) (GPS, BDS:B1/B3 GAL:E5a/E1)
static bool fillDataGalINav(const NavDataPtr &ndp, Rinex3NavData &rnd, HealthGetter &healthGet)
short getLegacyFitInterval(const short iodc, const short fiti)
RNDouble accuracy
SV accuracy (m)
@ L1
GPS L1, Galileo E1, SBAS L1, QZSS L1, BeiDou L1.
CorrType type
type of correction - enum CorrType
int week
Full week number.
RNDouble TauN
SV clock bias (sec)
RNDouble IODnav
Index of data-eph.
NavLibrary & navLib
NavLibrary to use for health look-up.
SatelliteSystem system
System for this satellite.
static bool convertTimeSystemToCorrType(TimeSystem src, TimeSystem tgt, TimeSystemCorrection::CorrType &ct)
@ TimeOffset
Message containing information about time system offsets.
RNDouble af0
SV clock error (sec)
RNDouble w
Argument of perigee (rad)
static bool fillTimeSystemCorrection(const std::shared_ptr< StdNavTimeOffset > &toffs, TimeSystemCorrection &tsc)
SVHealth xmitHealth
Parameter to NavLibrary::getHealth()
FormattedDouble param[4]
parameters ai0-ai2,0(GAL), alpha0-3 or beta0-3(GPS)
std::string toString() const noexcept
std::string printTime(const CommonTime &t, const std::string &fmt)
RNDouble Cus
Sine latitude (rad)
static bool fillDataGPSLNav(const NavDataPtr &ndp, Rinex3NavData &rnd)
@ E5bI
Galileo E5b I code.
@ Ephemeris
Precision orbits for the transmitting SV.
static bool fillDataGalFNav(const NavDataPtr &ndp, Rinex3NavData &rnd, HealthGetter &healthGet)
RNDouble az
SV acceleration.
NavValidityType valid
Parameter to NavLibrary::getHealth()
#define DEBUGTRACE_FUNCTION()
@ User
Return the latest message before the search time.
RNDouble Cis
Sine inclination (rad)
RinexSatID sat
RinexSatID (from PRNID & satSys)
long xmitTime
Time of subframe 1-3 (sec of week)
static bool fillDataBDSD1Nav(const NavDataPtr &ndp, Rinex3NavData &rnd)
bool find(const NavMessageID &nmid, const CommonTime &when, NavDataPtr &navOut, SVHealth xmitHealth, NavValidityType valid, NavSearchOrder order)
RNDouble GammaN
SV relative frequency bias.
std::string geoProvider
string 'EGNOS' 'WAAS' or 'MSAS'
RNDouble idot
Rate of inclination angle (rad/sec)
static bool fillDataBDSD2Nav(const NavDataPtr &ndp, Rinex3NavData &rnd)
char systemChar() const noexcept
static bool fillHeader(const NavDataPtr &ndp, Rinex3NavHeader &h)
RNDouble M0
Mean anomaly (rad)
@ L5
GPS L5, Galileo E5a, SBAS L5, QZSS L5, BeiDou B2a, NavIC L5.
gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:40