mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2026-02-03 00:30:20 +00:00
Cleanup RINEX log to not use hardcoded signal combination
This commit is contained in:
committed by
Carles Fernandez
parent
fa01c26613
commit
5a8c55d94d
@@ -57,6 +57,8 @@
|
||||
|
||||
namespace
|
||||
{
|
||||
using Constellation_Observables_Map = std::map<char, std::map<uint32_t, std::map<signal_flag, Gnss_Synchro>>>;
|
||||
|
||||
const std::unordered_map<std::string, char> satelliteSystem = {
|
||||
{"GPS", 'G'},
|
||||
{"GLONASS", 'R'},
|
||||
@@ -1345,7 +1347,7 @@ std::string get_leap_second_line(const Beidou_Dnav_Utc_Model& utc_model)
|
||||
|
||||
void write_two_digits_string(const std::string& two_digit_string, bool remove_leading_zero, std::string& line)
|
||||
{
|
||||
if (remove_leading_zero && two_digit_string.compare(0, 1, "0") == 0)
|
||||
if (remove_leading_zero && boost::lexical_cast<int32_t>(two_digit_string) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += two_digit_string.substr(1, 1);
|
||||
@@ -1357,9 +1359,9 @@ void write_two_digits_string(const std::string& two_digit_string, bool remove_le
|
||||
}
|
||||
|
||||
|
||||
void add_svclk_to_line(const boost::posix_time::ptime& utc_time, bool log_seconds, int version, std::string& line)
|
||||
void add_svclk_to_line(const boost::posix_time::ptime& system_time, bool log_seconds, int version, std::string& line)
|
||||
{
|
||||
const std::string timestring = boost::posix_time::to_iso_string(utc_time);
|
||||
const std::string timestring = boost::posix_time::to_iso_string(system_time);
|
||||
const std::string year(timestring, 0, 4);
|
||||
const std::string month(timestring, 4, 2);
|
||||
const std::string day(timestring, 6, 2);
|
||||
@@ -1387,7 +1389,7 @@ void add_svclk_to_line(const boost::posix_time::ptime& utc_time, bool log_second
|
||||
}
|
||||
|
||||
|
||||
std::string get_obs_epoch_record_lines(const boost::posix_time::ptime& utc_time, double seconds, int version)
|
||||
std::string get_obs_epoch_record_lines(const boost::posix_time::ptime& system_time, double seconds, int version)
|
||||
{
|
||||
// -------- EPOCH record
|
||||
std::string line = std::string(1, '>');
|
||||
@@ -1395,7 +1397,7 @@ std::string get_obs_epoch_record_lines(const boost::posix_time::ptime& utc_time,
|
||||
// double utc_t = nav_msg.utc_time(nav_msg.sv_clock_correction(obs_time));
|
||||
// const double gps_t = eph.sv_clock_correction(obs_time);
|
||||
|
||||
add_svclk_to_line(utc_time, false, version, line);
|
||||
add_svclk_to_line(system_time, false, version, line);
|
||||
|
||||
// Add extra 0 if seconds are < 10
|
||||
if (seconds < 10)
|
||||
@@ -1473,7 +1475,7 @@ void add_constellation_obs_sat_record_lines(std::fstream& out, const std::string
|
||||
}
|
||||
}
|
||||
|
||||
void add_constellation_obs_sat_record_lines(std::fstream& out, const std::initializer_list<std::string>& systems, const Constellation_Observables_Map& observables, int version)
|
||||
void add_constellation_obs_sat_record_lines(std::fstream& out, const std::vector<std::string>& systems, const Constellation_Observables_Map& observables, int version)
|
||||
{
|
||||
for (const auto& system : systems)
|
||||
{
|
||||
@@ -1567,6 +1569,41 @@ void add_obs_time_first_obs(std::fstream& out, const std::string& constellation,
|
||||
}
|
||||
|
||||
|
||||
std::string get_datetime_v2(const boost::posix_time::ptime& p_utc_time)
|
||||
{
|
||||
std::string line;
|
||||
|
||||
const std::string timestring = boost::posix_time::to_iso_string(p_utc_time);
|
||||
const std::string year(timestring, 2, 2);
|
||||
const std::string month(timestring, 4, 2);
|
||||
const std::string day(timestring, 6, 2);
|
||||
const std::string hour(timestring, 9, 2);
|
||||
const std::string minutes(timestring, 11, 2);
|
||||
const std::string seconds(timestring, 13, 2);
|
||||
|
||||
line += year;
|
||||
line += std::string(1, ' ');
|
||||
write_two_digits_string(month, true, line);
|
||||
line += std::string(1, ' ');
|
||||
write_two_digits_string(day, true, line);
|
||||
line += std::string(1, ' ');
|
||||
write_two_digits_string(hour, true, line);
|
||||
line += std::string(1, ' ');
|
||||
write_two_digits_string(minutes, true, line);
|
||||
line += std::string(1, ' ');
|
||||
write_two_digits_string(seconds, true, line);
|
||||
line += std::string(1, '.');
|
||||
std::string decimal = "0";
|
||||
if (timestring.size() > 16)
|
||||
{
|
||||
decimal = std::string(timestring, 16, 1);
|
||||
}
|
||||
line += decimal;
|
||||
|
||||
return line;
|
||||
}
|
||||
|
||||
|
||||
void add_obs_sys_obs_type(std::fstream& out,
|
||||
char sys_char,
|
||||
int numberTypesObservations,
|
||||
@@ -1762,9 +1799,9 @@ void add_obs_glonass_code_phase_bias(std::fstream& out,
|
||||
out << line << '\n';
|
||||
}
|
||||
|
||||
void add_obs_epoch_record(std::fstream& out, const boost::posix_time::ptime& utc_time, double seconds, int version, const Constellation_Observables_Map& constel_observables)
|
||||
void add_obs_epoch_record(std::fstream& out, const boost::posix_time::ptime& system_time, double seconds, int version, const Constellation_Observables_Map& constel_observables)
|
||||
{
|
||||
std::string line = get_obs_epoch_record_lines(utc_time, seconds, version);
|
||||
std::string line = get_obs_epoch_record_lines(system_time, seconds, version);
|
||||
|
||||
int32_t number_satellites = 0;
|
||||
|
||||
@@ -2002,31 +2039,26 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
{
|
||||
rinex_obs_header(obsFile, gps_ephemeris_iter->second, rx_time);
|
||||
rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map);
|
||||
}
|
||||
else if ((flags.check_only_enabled(GPS_2S) || flags.check_only_enabled(GPS_L5)) && has_gps_cnav_eph)
|
||||
{
|
||||
rinex_obs_header(obsFile, gps_cnav_ephemeris_iter->second, rx_time, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->gps_cnav_iono, pvt_solver->gps_cnav_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_cnav_ephemeris_map);
|
||||
}
|
||||
else if (only_galileo && has_galileo_eph)
|
||||
{
|
||||
rinex_obs_header(obsFile, galileo_ephemeris_iter->second, rx_time, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->galileo_ephemeris_map);
|
||||
}
|
||||
else if (only_glonass && has_glonass_eph)
|
||||
{
|
||||
rinex_obs_header(obsFile, glonass_gnav_ephemeris_iter->second, rx_time, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->glonass_gnav_utc_model, glonass_gnav_ephemeris_iter->second);
|
||||
log_rinex_nav(navFile, pvt_solver->glonass_gnav_ephemeris_map);
|
||||
}
|
||||
else if (only_beidou && has_beidou_dnav_eph)
|
||||
{
|
||||
rinex_obs_header(obsFile, beidou_dnav_ephemeris_iter->second, rx_time, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->beidou_dnav_iono, pvt_solver->beidou_dnav_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->beidou_dnav_ephemeris_map);
|
||||
}
|
||||
else if ((flags.check_only_enabled(GPS_1C, GPS_2S) ||
|
||||
flags.check_only_enabled(GPS_1C, GPS_L5) ||
|
||||
@@ -2035,29 +2067,18 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
{
|
||||
rinex_obs_header(obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, rx_time, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second);
|
||||
|
||||
if (flags.check_any_enabled(GPS_L5))
|
||||
{
|
||||
log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map);
|
||||
}
|
||||
else
|
||||
{
|
||||
log_rinex_nav(navFile, pvt_solver->gps_cnav_ephemeris_map);
|
||||
}
|
||||
}
|
||||
else if ((flags.check_only_enabled(GPS_1C, GAL_1B) || flags.check_only_enabled(GPS_1C, GAL_E5a) || flags.check_only_enabled(GPS_1C, GAL_E5b)) &&
|
||||
has_gps_lnav_eph && has_galileo_eph)
|
||||
{
|
||||
rinex_obs_header(obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map, pvt_solver->galileo_ephemeris_map);
|
||||
}
|
||||
else if (flags.check_only_enabled(GPS_L5, GAL_E5a) &&
|
||||
has_gps_cnav_eph && has_galileo_eph)
|
||||
{
|
||||
rinex_obs_header(obsFile, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, signal, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->gps_cnav_iono, pvt_solver->gps_cnav_utc_model, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_cnav_ephemeris_map, pvt_solver->galileo_ephemeris_map);
|
||||
}
|
||||
else if ((flags.check_only_enabled(GPS_1C, GLO_1G) || flags.check_only_enabled(GPS_1C, GLO_2G) || flags.check_only_enabled(GPS_1C, GLO_1G, GLO_2G)) &&
|
||||
has_gps_lnav_eph && has_glonass_eph)
|
||||
@@ -2066,15 +2087,12 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
if (d_version == 3)
|
||||
{
|
||||
rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second, pvt_solver->glonass_gnav_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map, pvt_solver->glonass_gnav_ephemeris_map);
|
||||
}
|
||||
if (d_version == 2)
|
||||
{
|
||||
rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second);
|
||||
rinex_nav_header(navGloFile, pvt_solver->glonass_gnav_utc_model, glonass_gnav_ephemeris_iter->second);
|
||||
output_navfilename.push_back(navGlofilename);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map);
|
||||
log_rinex_nav(navGloFile, pvt_solver->glonass_gnav_ephemeris_map);
|
||||
}
|
||||
}
|
||||
else if ((flags.check_only_enabled(GLO_1G, GPS_2S) || flags.check_only_enabled(GLO_2G, GPS_2S)) &&
|
||||
@@ -2082,14 +2100,12 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
{
|
||||
rinex_obs_header(obsFile, gps_cnav_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, rx_time, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->gps_cnav_iono, pvt_solver->gps_cnav_utc_model, pvt_solver->glonass_gnav_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_cnav_ephemeris_map, pvt_solver->glonass_gnav_ephemeris_map);
|
||||
}
|
||||
else if ((flags.check_only_enabled(GAL_1B, GLO_1G) || flags.check_only_enabled(GAL_1B, GLO_2G)) &&
|
||||
has_galileo_eph && has_glonass_eph)
|
||||
{
|
||||
rinex_obs_header(obsFile, galileo_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, rx_time, signal, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model, pvt_solver->glonass_gnav_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->galileo_ephemeris_map, pvt_solver->glonass_gnav_ephemeris_map);
|
||||
}
|
||||
else if ((flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a) ||
|
||||
flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a, GAL_E6) ||
|
||||
@@ -2098,13 +2114,11 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
{
|
||||
rinex_obs_header(obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, signal, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map, pvt_solver->galileo_ephemeris_map);
|
||||
}
|
||||
else if ((flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E5a) || flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E5b)) && has_gps_lnav_eph && has_galileo_eph)
|
||||
{
|
||||
rinex_obs_header(obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map, pvt_solver->galileo_ephemeris_map);
|
||||
}
|
||||
else if (flags.check_only_enabled(GPS_1C, GAL_E6) && has_gps_lnav_eph)
|
||||
{
|
||||
@@ -2113,14 +2127,12 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
// we have Galileo ephemeris, maybe from assistance
|
||||
rinex_obs_header(obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, signal);
|
||||
rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map, pvt_solver->galileo_ephemeris_map);
|
||||
}
|
||||
else
|
||||
{
|
||||
// we do not have galileo ephemeris, print only GPS data
|
||||
rinex_obs_header(obsFile, gps_ephemeris_iter->second, rx_time);
|
||||
rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second);
|
||||
log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map);
|
||||
}
|
||||
}
|
||||
else if (has_beidou && has_beidou_dnav_eph)
|
||||
@@ -2133,6 +2145,38 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
rinex_header_written = false;
|
||||
}
|
||||
|
||||
if (rinex_header_written)
|
||||
{
|
||||
if (has_gps_lnav_eph && !flags.check_any_enabled(GPS_L5)) // That's how it used to be, not sure why
|
||||
{
|
||||
log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map);
|
||||
}
|
||||
else if (has_gps_cnav_eph)
|
||||
{
|
||||
log_rinex_nav(navFile, pvt_solver->gps_cnav_ephemeris_map);
|
||||
}
|
||||
|
||||
if (has_galileo_eph)
|
||||
{
|
||||
log_rinex_nav(navFile, pvt_solver->galileo_ephemeris_map);
|
||||
}
|
||||
if (has_glonass_eph)
|
||||
{
|
||||
if (d_version == 2 && output_navfilename.size() == 2)
|
||||
{
|
||||
log_rinex_nav(navGloFile, pvt_solver->glonass_gnav_ephemeris_map);
|
||||
}
|
||||
else
|
||||
{
|
||||
log_rinex_nav(navFile, pvt_solver->glonass_gnav_ephemeris_map);
|
||||
}
|
||||
}
|
||||
if (has_beidou_dnav_eph)
|
||||
{
|
||||
log_rinex_nav(navFile, pvt_solver->beidou_dnav_ephemeris_map);
|
||||
}
|
||||
}
|
||||
|
||||
d_rinex_header_written = rinex_header_written;
|
||||
}
|
||||
|
||||
@@ -2141,9 +2185,81 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
const auto constel_signal_flags = get_constel_signal_flags(flags);
|
||||
const auto constel_observables = get_constellation_observables_map(constel_signal_flags, gnss_observables_map);
|
||||
|
||||
double seconds;
|
||||
boost::posix_time::ptime system_time;
|
||||
|
||||
// Order is important
|
||||
if (flags.check_any_enabled(GPS_1C))
|
||||
{
|
||||
if (has_gps_lnav_eph)
|
||||
{
|
||||
system_time = Rinex_Printer::compute_GPS_time(gps_ephemeris_iter->second, rx_time);
|
||||
seconds = fmod(rx_time, 60);
|
||||
}
|
||||
}
|
||||
else if (has_gps)
|
||||
{
|
||||
if (has_gps_cnav_eph)
|
||||
{
|
||||
system_time = Rinex_Printer::compute_GPS_time(gps_cnav_ephemeris_iter->second, rx_time);
|
||||
seconds = fmod(rx_time, 60);
|
||||
}
|
||||
}
|
||||
else if (has_galileo)
|
||||
{
|
||||
if (has_galileo_eph)
|
||||
{
|
||||
system_time = Rinex_Printer::compute_Galileo_time(galileo_ephemeris_iter->second, rx_time);
|
||||
seconds = fmod(rx_time, 60);
|
||||
}
|
||||
}
|
||||
else if (has_glonass)
|
||||
{
|
||||
if (has_glonass_eph)
|
||||
{
|
||||
double int_sec = 0;
|
||||
system_time = Rinex_Printer::compute_UTC_time(glonass_gnav_ephemeris_iter->second, rx_time);
|
||||
seconds = modf(rx_time, &int_sec) + system_time.time_of_day().seconds();
|
||||
}
|
||||
}
|
||||
else if (has_beidou)
|
||||
{
|
||||
if (has_beidou_dnav_eph)
|
||||
{
|
||||
system_time = Rinex_Printer::compute_BDS_time(beidou_dnav_ephemeris_iter->second, rx_time);
|
||||
seconds = fmod(rx_time, 60);
|
||||
}
|
||||
}
|
||||
|
||||
if (system_time.is_not_a_date_time())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<std::string> constellations;
|
||||
|
||||
if (has_gps)
|
||||
{
|
||||
constellations.emplace_back("GPS");
|
||||
}
|
||||
if (has_galileo)
|
||||
{
|
||||
constellations.emplace_back("Galileo");
|
||||
}
|
||||
if (has_glonass)
|
||||
{
|
||||
constellations.emplace_back("GLONASS");
|
||||
}
|
||||
if (has_beidou)
|
||||
{
|
||||
constellations.emplace_back("Beidou");
|
||||
}
|
||||
|
||||
add_obs_epoch_record(obsFile, system_time, seconds, d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(obsFile, constellations, constel_observables, d_version);
|
||||
|
||||
if (flags.check_only_enabled(GPS_1C) && has_gps_lnav_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, rx_time, constel_observables);
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_utc_model, d_version));
|
||||
@@ -2153,7 +2269,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (flags.check_only_enabled(GPS_1C, GPS_2S) && has_gps_lnav_eph && has_gps_cnav_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, rx_time, constel_observables);
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_utc_model, d_version));
|
||||
@@ -2163,7 +2278,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (flags.check_only_enabled(GPS_1C, GPS_L5) && has_gps_lnav_eph && has_gps_cnav_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, rx_time, constel_observables);
|
||||
if (!d_rinex_header_updated && ((pvt_solver->gps_cnav_utc_model.A0 != 0) || (pvt_solver->gps_utc_model.A0 != 0)))
|
||||
{
|
||||
if (pvt_solver->gps_cnav_utc_model.A0 != 0)
|
||||
@@ -2181,10 +2295,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (flags.check_only_enabled(GPS_2S) || flags.check_only_enabled(GPS_L5) || flags.check_only_enabled(GPS_2S, GPS_L5))
|
||||
{
|
||||
if (has_gps_cnav_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_cnav_ephemeris_iter->second, rx_time, constel_observables);
|
||||
}
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_cnav_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_cnav_utc_model));
|
||||
@@ -2194,10 +2304,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (flags.check_only_enabled(GPS_1C, GPS_2S, GPS_L5))
|
||||
{
|
||||
if (has_gps_lnav_eph && has_gps_cnav_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, rx_time, constel_observables);
|
||||
}
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0) && (has_gps_lnav_eph))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_utc_model, d_version));
|
||||
@@ -2207,10 +2313,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (only_galileo)
|
||||
{
|
||||
if (has_galileo_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, galileo_ephemeris_iter->second, rx_time, constel_observables);
|
||||
}
|
||||
if (!d_rinex_header_updated && (pvt_solver->galileo_utc_model.A0 != 0))
|
||||
{
|
||||
update_nav_header(navFile, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model);
|
||||
@@ -2220,10 +2322,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (only_glonass)
|
||||
{
|
||||
if (has_glonass_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, glonass_gnav_ephemeris_iter->second, rx_time, constel_observables);
|
||||
}
|
||||
if (!d_rinex_header_updated && (pvt_solver->glonass_gnav_utc_model.d_tau_c != 0))
|
||||
{
|
||||
update_nav_header(navFile, pvt_solver->glonass_gnav_utc_model);
|
||||
@@ -2232,10 +2330,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (only_beidou)
|
||||
{
|
||||
if (has_beidou_dnav_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, beidou_dnav_ephemeris_iter->second, rx_time, constel_observables);
|
||||
}
|
||||
if (!d_rinex_header_updated && (pvt_solver->beidou_dnav_utc_model.A0_UTC != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->beidou_dnav_utc_model));
|
||||
@@ -2246,7 +2340,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
else if ((flags.check_only_enabled(GPS_1C, GAL_1B) || flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E6)) &&
|
||||
has_gps_lnav_eph && has_galileo_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, constel_observables);
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_utc_model, d_version));
|
||||
@@ -2257,7 +2350,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
else if ((flags.check_only_enabled(GPS_1C, GLO_1G) || flags.check_only_enabled(GPS_1C, GLO_2G) || flags.check_only_enabled(GPS_1C, GLO_1G, GLO_2G)) &&
|
||||
has_gps_lnav_eph && has_glonass_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, rx_time, constel_observables);
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_utc_model, d_version));
|
||||
@@ -2267,10 +2359,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (flags.check_only_enabled(GPS_L5, GAL_E5a))
|
||||
{
|
||||
if ((has_gps_cnav_eph) && (has_galileo_eph))
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, constel_observables);
|
||||
}
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_cnav_utc_model.A0 != 0) && (pvt_solver->galileo_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_cnav_utc_model));
|
||||
@@ -2280,10 +2368,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (flags.check_only_enabled(GAL_1B, GLO_1G) || flags.check_only_enabled(GAL_1B, GLO_2G))
|
||||
{
|
||||
if ((has_glonass_eph) && (has_galileo_eph))
|
||||
{
|
||||
log_rinex_obs(obsFile, galileo_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, rx_time, constel_observables);
|
||||
}
|
||||
if (!d_rinex_header_updated && (pvt_solver->galileo_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->galileo_utc_model));
|
||||
@@ -2293,10 +2377,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (flags.check_only_enabled(GPS_2S, GLO_1G) || flags.check_only_enabled(GPS_2S, GLO_2G))
|
||||
{
|
||||
if ((has_glonass_eph) && (has_gps_cnav_eph))
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_cnav_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, rx_time, constel_observables);
|
||||
}
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_cnav_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_cnav_utc_model));
|
||||
@@ -2308,7 +2388,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
{
|
||||
if (has_gps_lnav_eph && has_gps_cnav_eph && has_galileo_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, constel_observables);
|
||||
if (!d_rinex_header_updated && ((pvt_solver->gps_cnav_utc_model.A0 != 0) || (pvt_solver->gps_utc_model.A0 != 0)) && (pvt_solver->galileo_utc_model.A0 != 0))
|
||||
{
|
||||
if (pvt_solver->gps_cnav_utc_model.A0 != 0)
|
||||
@@ -2329,7 +2408,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
{
|
||||
if (has_gps_lnav_eph && has_galileo_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, constel_observables);
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0) && (pvt_solver->galileo_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_utc_model, d_version));
|
||||
@@ -2340,10 +2418,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
}
|
||||
else if (flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a, GAL_E6) || flags.check_only_enabled(GPS_1C, GAL_1B, GPS_2S, GPS_L5, GAL_E5a))
|
||||
{
|
||||
if (has_galileo_eph && has_gps_lnav_eph && has_gps_cnav_eph)
|
||||
{
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, constel_observables);
|
||||
}
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0) && (pvt_solver->galileo_utc_model.A0 != 0) && (has_gps_lnav_eph))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_utc_model, d_version));
|
||||
@@ -2356,7 +2430,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
if (has_galileo_eph)
|
||||
{
|
||||
// we have Galileo ephemeris, maybe from assistance
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, constel_observables);
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_utc_model, d_version));
|
||||
@@ -2367,7 +2440,6 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver,
|
||||
else
|
||||
{
|
||||
// we do not have galileo ephemeris, print only GPS data
|
||||
log_rinex_obs(obsFile, gps_ephemeris_iter->second, rx_time, constel_observables);
|
||||
if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0))
|
||||
{
|
||||
update_obs_header(obsFile, get_leap_second_line(pvt_solver->gps_utc_model, d_version));
|
||||
@@ -2400,14 +2472,14 @@ void Rinex_Printer::log_rinex_nav_gal_nav(const std::map<int32_t, Galileo_Epheme
|
||||
|
||||
void Rinex_Printer::log_rinex_nav_glo_gnav(const std::map<int32_t, Glonass_Gnav_Ephemeris>& new_glo_eph)
|
||||
{
|
||||
if (d_version == 3)
|
||||
{
|
||||
log_rinex_nav(navFile, new_glo_eph);
|
||||
}
|
||||
else if (d_version == 2)
|
||||
if (d_version == 2 && output_navfilename.size() == 2)
|
||||
{
|
||||
log_rinex_nav(navGloFile, new_glo_eph);
|
||||
}
|
||||
else
|
||||
{
|
||||
log_rinex_nav(navFile, new_glo_eph);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2780,29 +2852,15 @@ void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_Iono& iono, co
|
||||
line += rightJustify(doub2for(utc_model.A0, 18, 2), 19);
|
||||
line += rightJustify(doub2for(utc_model.A1, 18, 2), 19);
|
||||
line += rightJustify(std::to_string(utc_model.tot), 9);
|
||||
if (d_pre_2009_file == false)
|
||||
if (d_pre_2009_file == false && eph.WN < 512)
|
||||
{
|
||||
if (eph.WN < 512)
|
||||
if (utc_model.WN_T == 0)
|
||||
{
|
||||
if (utc_model.WN_T == 0)
|
||||
{
|
||||
line += rightJustify(std::to_string(eph.WN + 2048), 9); // valid from 2019 to 2029
|
||||
}
|
||||
else
|
||||
{
|
||||
line += rightJustify(std::to_string(utc_model.WN_T + (eph.WN / 256) * 256 + 1024), 9); // valid from 2019 to 2029
|
||||
}
|
||||
line += rightJustify(std::to_string(eph.WN + 2048), 9); // valid from 2019 to 2029
|
||||
}
|
||||
else
|
||||
{
|
||||
if (utc_model.WN_T == 0)
|
||||
{
|
||||
line += rightJustify(std::to_string(eph.WN + 1024), 9); // valid from 2019 to 2029
|
||||
}
|
||||
else
|
||||
{
|
||||
line += rightJustify(std::to_string(utc_model.WN_T + (eph.WN / 256) * 256 + 1024), 9); // valid from 2009 to 2019
|
||||
}
|
||||
line += rightJustify(std::to_string(utc_model.WN_T + (eph.WN / 256) * 256 + 1024), 9); // valid from 2019 to 2029
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -3336,73 +3394,9 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps
|
||||
|
||||
if (d_version == 2)
|
||||
{
|
||||
const std::string timestring = boost::posix_time::to_iso_string(p_utc_time);
|
||||
const std::string month(timestring, 4, 2);
|
||||
const std::string day(timestring, 6, 2);
|
||||
const std::string hour(timestring, 9, 2);
|
||||
const std::string minutes(timestring, 11, 2);
|
||||
const std::string seconds(timestring, 13, 2);
|
||||
line += rightJustify(std::to_string(eph.PRN), 2);
|
||||
line += std::string(1, ' ');
|
||||
const std::string year(timestring, 2, 2);
|
||||
line += year;
|
||||
line += std::string(1, ' ');
|
||||
if (boost::lexical_cast<int32_t>(month) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += std::string(month, 1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
line += month;
|
||||
}
|
||||
line += std::string(1, ' ');
|
||||
if (boost::lexical_cast<int32_t>(day) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += std::string(day, 1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
line += day;
|
||||
}
|
||||
line += std::string(1, ' ');
|
||||
if (boost::lexical_cast<int32_t>(hour) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += std::string(hour, 1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
line += hour;
|
||||
}
|
||||
line += std::string(1, ' ');
|
||||
if (boost::lexical_cast<int32_t>(minutes) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += std::string(minutes, 1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
line += minutes;
|
||||
}
|
||||
line += std::string(1, ' ');
|
||||
if (boost::lexical_cast<int32_t>(seconds) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += std::string(seconds, 1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
line += seconds;
|
||||
}
|
||||
line += std::string(1, '.');
|
||||
std::string decimal = std::string("0");
|
||||
if (timestring.size() > 16)
|
||||
{
|
||||
decimal = std::string(timestring, 16, 1);
|
||||
}
|
||||
line += decimal;
|
||||
line += get_datetime_v2(p_utc_time);
|
||||
line += std::string(1, ' ');
|
||||
line += doub2for(eph.af0, 18, 2);
|
||||
line += std::string(1, ' ');
|
||||
@@ -3642,40 +3636,8 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gal
|
||||
out << get_nav_broadcast_orbit(&eph.idot, &data_source_INAV, &Galileo_week_continuous_number, &zero) << '\n';
|
||||
|
||||
// -------- BROADCAST ORBIT - 6
|
||||
std::string E1B_HS;
|
||||
std::string E5B_HS;
|
||||
if (eph.E1B_HS == 0)
|
||||
{
|
||||
E1B_HS = "00";
|
||||
}
|
||||
if (eph.E1B_HS == 1)
|
||||
{
|
||||
E1B_HS = "01";
|
||||
}
|
||||
if (eph.E1B_HS == 2)
|
||||
{
|
||||
E1B_HS = "10";
|
||||
}
|
||||
if (eph.E1B_HS == 3)
|
||||
{
|
||||
E1B_HS = "11";
|
||||
}
|
||||
if (eph.E5b_HS == 0)
|
||||
{
|
||||
E5B_HS = "00";
|
||||
}
|
||||
if (eph.E5b_HS == 1)
|
||||
{
|
||||
E5B_HS = "01";
|
||||
}
|
||||
if (eph.E5b_HS == 2)
|
||||
{
|
||||
E5B_HS = "10";
|
||||
}
|
||||
if (eph.E5b_HS == 3)
|
||||
{
|
||||
E5B_HS = "11";
|
||||
}
|
||||
std::string E1B_HS = std::bitset<2>(eph.E1B_HS).to_string();
|
||||
std::string E5B_HS = std::bitset<2>(eph.E5b_HS).to_string();
|
||||
|
||||
std::string E1B_DVS = std::to_string(eph.E1B_DVS);
|
||||
const std::string SVhealth_str = std::move(E5B_HS) + std::to_string(eph.E5b_DVS) + "11" + "1" + std::move(E1B_DVS) + std::move(E1B_HS) + std::to_string(eph.E1B_DVS);
|
||||
@@ -3701,75 +3663,12 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Glo
|
||||
|
||||
// -------- SV / EPOCH / SV CLK
|
||||
const boost::posix_time::ptime p_utc_time = eph.glot_to_utc(eph.d_t_b, 0.0);
|
||||
const std::string timestring = boost::posix_time::to_iso_string(p_utc_time);
|
||||
const std::string month(timestring, 4, 2);
|
||||
const std::string day(timestring, 6, 2);
|
||||
const std::string hour(timestring, 9, 2);
|
||||
const std::string minutes(timestring, 11, 2);
|
||||
const std::string seconds(timestring, 13, 2);
|
||||
|
||||
if (d_version == 2)
|
||||
{
|
||||
line += rightJustify(std::to_string(eph.PRN), 2);
|
||||
line += std::string(1, ' ');
|
||||
const std::string year(timestring, 2, 2);
|
||||
line += year;
|
||||
line += std::string(1, ' ');
|
||||
if (boost::lexical_cast<int32_t>(month) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += std::string(month, 1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
line += month;
|
||||
}
|
||||
line += std::string(1, ' ');
|
||||
if (boost::lexical_cast<int32_t>(day) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += std::string(day, 1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
line += day;
|
||||
}
|
||||
line += std::string(1, ' ');
|
||||
if (boost::lexical_cast<int32_t>(hour) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += std::string(hour, 1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
line += hour;
|
||||
}
|
||||
line += std::string(1, ' ');
|
||||
if (boost::lexical_cast<int32_t>(minutes) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += std::string(minutes, 1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
line += minutes;
|
||||
}
|
||||
line += std::string(1, ' ');
|
||||
if (boost::lexical_cast<int32_t>(seconds) < 10)
|
||||
{
|
||||
line += std::string(1, ' ');
|
||||
line += std::string(seconds, 1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
line += seconds;
|
||||
}
|
||||
line += std::string(1, '.');
|
||||
std::string decimal = std::string("0");
|
||||
if (timestring.size() > 16)
|
||||
{
|
||||
decimal = std::string(timestring, 16, 1);
|
||||
}
|
||||
line += decimal;
|
||||
line += get_datetime_v2(p_utc_time);
|
||||
line += std::string(1, ' ');
|
||||
line += doub2for(-eph.d_tau_c, 18, 2);
|
||||
line += std::string(1, ' ');
|
||||
@@ -3799,41 +3698,6 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Glo
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_Ephemeris>& gps_eph_map, const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map)
|
||||
{
|
||||
Rinex_Printer::log_rinex_nav(out, gps_eph_map);
|
||||
Rinex_Printer::log_rinex_nav(out, galileo_eph_map);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_CNAV_Ephemeris>& gps_cnav_eph_map, const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map)
|
||||
{
|
||||
Rinex_Printer::log_rinex_nav(out, gps_cnav_eph_map);
|
||||
Rinex_Printer::log_rinex_nav(out, galileo_eph_map);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_Ephemeris>& gps_eph_map, const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map) const
|
||||
{
|
||||
Rinex_Printer::log_rinex_nav(out, gps_eph_map);
|
||||
Rinex_Printer::log_rinex_nav(out, glonass_gnav_eph_map);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_CNAV_Ephemeris>& gps_cnav_eph_map, const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map)
|
||||
{
|
||||
Rinex_Printer::log_rinex_nav(out, gps_cnav_eph_map);
|
||||
Rinex_Printer::log_rinex_nav(out, glonass_gnav_eph_map);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map, const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map)
|
||||
{
|
||||
Rinex_Printer::log_rinex_nav(out, galileo_eph_map);
|
||||
Rinex_Printer::log_rinex_nav(out, glonass_gnav_eph_map);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Beidou_Dnav_Ephemeris>& eph_map) const
|
||||
{
|
||||
const auto& sys_char = satelliteSystem.at("Beidou");
|
||||
@@ -4299,93 +4163,6 @@ void Rinex_Printer::update_obs_header(std::fstream& out, const std::string& leap
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Glonass_Gnav_Ephemeris& eph, double obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
double int_sec = 0;
|
||||
const boost::posix_time::ptime p_glonass_time = Rinex_Printer::compute_UTC_time(eph, obs_time);
|
||||
const double utc_sec = modf(obs_time, &int_sec) + p_glonass_time.time_of_day().seconds();
|
||||
add_obs_epoch_record(out, p_glonass_time, utc_sec, d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, "GLONASS", constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Glonass_Gnav_Ephemeris& /*glonass_gnav_eph*/, double gps_obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_GPS_time(gps_eph, gps_obs_time), fmod(gps_obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, {"GPS", "GLONASS"}, constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_CNAV_Ephemeris& gps_eph, const Glonass_Gnav_Ephemeris& /*glonass_gnav_eph*/, double gps_obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_GPS_time(gps_eph, gps_obs_time), fmod(gps_obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, {"GPS", "GLONASS"}, constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Galileo_Ephemeris& galileo_eph, const Glonass_Gnav_Ephemeris& /*glonass_gnav_eph*/, double galileo_obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_Galileo_time(galileo_eph, galileo_obs_time), fmod(galileo_obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, {"Galileo", "GLONASS"}, constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, double obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_GPS_time(eph, obs_time), fmod(obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, "GPS", constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_CNAV_Ephemeris& eph, double obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_GPS_time(eph, obs_time), fmod(obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, "GPS", constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, const Gps_CNAV_Ephemeris& /*eph_cnav*/, double obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_GPS_time(eph, obs_time), fmod(obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, "GPS", constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Galileo_Ephemeris& eph, double obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_Galileo_time(eph, obs_time), fmod(obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, "Galileo", constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Galileo_Ephemeris& /*galileo_eph*/, double gps_obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_GPS_time(gps_eph, gps_obs_time), fmod(gps_obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, {"GPS", "Galileo"}, constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_CNAV_Ephemeris& eph, const Galileo_Ephemeris& /*galileo_eph*/, double gps_obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_GPS_time(eph, gps_obs_time), fmod(gps_obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, {"GPS", "Galileo"}, constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& /*gps_cnav_eph*/, const Galileo_Ephemeris& /*galileo_eph*/, double gps_obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_GPS_time(gps_eph, gps_obs_time), fmod(gps_obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, {"GPS", "Galileo"}, constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::log_rinex_obs(std::fstream& out, const Beidou_Dnav_Ephemeris& eph, double obs_time, const Constellation_Observables_Map& constel_observables) const
|
||||
{
|
||||
add_obs_epoch_record(out, Rinex_Printer::compute_BDS_time(eph, obs_time), fmod(obs_time, 60), d_version, constel_observables);
|
||||
add_constellation_obs_sat_record_lines(out, "Beidou", constel_observables, d_version);
|
||||
}
|
||||
|
||||
|
||||
void Rinex_Printer::to_date_time(int32_t gps_week, int32_t gps_tow, int& year, int& month, int& day, int& hour, int& minute, int& second) const
|
||||
{
|
||||
// represents GPS time (week, TOW) in the date time format of the Gregorian calendar.
|
||||
@@ -4695,65 +4472,6 @@ boost::posix_time::ptime Rinex_Printer::compute_UTC_time(const Glonass_Gnav_Ephe
|
||||
}
|
||||
|
||||
|
||||
double Rinex_Printer::get_leap_second(const Glonass_Gnav_Ephemeris& eph, double gps_obs_time) const
|
||||
{
|
||||
double tod = 0.0;
|
||||
const double glot2utc = 3 * 3600;
|
||||
double obs_time_glot = 0.0;
|
||||
int32_t i = 0;
|
||||
double leap_second = 0;
|
||||
int J = 0;
|
||||
if (eph.d_N_T >= 1 && eph.d_N_T <= 366)
|
||||
{
|
||||
J = 1;
|
||||
}
|
||||
else if (eph.d_N_T >= 367 && eph.d_N_T <= 731)
|
||||
{
|
||||
J = 2;
|
||||
}
|
||||
else if (eph.d_N_T >= 732 && eph.d_N_T <= 1096)
|
||||
{
|
||||
J = 3;
|
||||
}
|
||||
else if (eph.d_N_T >= 1097 && eph.d_N_T <= 1461)
|
||||
{
|
||||
J = 4;
|
||||
}
|
||||
|
||||
// Get observation time in nearly GLONASS time. Correction for leap seconds done at the end
|
||||
obs_time_glot = gps_obs_time + glot2utc;
|
||||
|
||||
// Get seconds of day in glonass time
|
||||
tod = fmod(obs_time_glot, 86400);
|
||||
|
||||
// Form date and time duration types
|
||||
const boost::posix_time::time_duration t1(0, 0, tod);
|
||||
const boost::gregorian::date d1(eph.d_yr - J + 1.0, 1, 1);
|
||||
const boost::gregorian::days d2(eph.d_N_T - 1);
|
||||
const boost::posix_time::ptime glo_time(d1 + d2, t1);
|
||||
|
||||
// Convert to utc
|
||||
const boost::posix_time::time_duration t2(0, 0, glot2utc);
|
||||
boost::posix_time::ptime utc_time = glo_time - t2;
|
||||
|
||||
// Adjust for leap second correction
|
||||
for (i = 0; GLONASS_LEAP_SECONDS[i][0] > 0; i++)
|
||||
{
|
||||
const boost::posix_time::time_duration t3(GLONASS_LEAP_SECONDS[i][3], GLONASS_LEAP_SECONDS[i][4], GLONASS_LEAP_SECONDS[i][5]);
|
||||
const boost::gregorian::date d3(GLONASS_LEAP_SECONDS[i][0], GLONASS_LEAP_SECONDS[i][1], GLONASS_LEAP_SECONDS[i][2]);
|
||||
const boost::posix_time::ptime ls_time(d3, t3);
|
||||
if (utc_time >= ls_time)
|
||||
{
|
||||
// We subtract the leap second when going from gpst to utc
|
||||
leap_second = fabs(GLONASS_LEAP_SECONDS[i][6]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return leap_second;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
enum RINEX_enumMarkerType {
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#ifndef GNSS_SDR_RINEX_PRINTER_H
|
||||
#define GNSS_SDR_RINEX_PRINTER_H
|
||||
|
||||
#include "signal_enabled_flags.h"
|
||||
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||
#include <cstdint> // for int32_t
|
||||
#include <cstdlib> // for strtol, strtod
|
||||
@@ -73,8 +72,6 @@ class Gps_Navigation_Message;
|
||||
class Gps_Utc_Model;
|
||||
class Rtklib_Solver;
|
||||
|
||||
using Constellation_Observables_Map = std::map<char, std::map<uint32_t, std::map<signal_flag, Gnss_Synchro>>>;
|
||||
|
||||
|
||||
/*!
|
||||
* \brief Class that handles the generation of Receiver
|
||||
@@ -288,112 +285,6 @@ private:
|
||||
*/
|
||||
void rinex_sbs_header(std::fstream& out) const;
|
||||
|
||||
/*
|
||||
* Writes GPS L1 observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_Ephemeris& eph,
|
||||
double obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes GPS L2 observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_CNAV_Ephemeris& eph,
|
||||
double obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes dual frequency GPS L1 and L2 observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_Ephemeris& eph,
|
||||
const Gps_CNAV_Ephemeris& eph_cnav,
|
||||
double obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes Galileo observables into the RINEX file.
|
||||
* Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Galileo_Ephemeris& eph,
|
||||
double obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes Mixed GPS / Galileo observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_Ephemeris& gps_eph,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
double gps_obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes Mixed GPS / Galileo observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_CNAV_Ephemeris& eph,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
double gps_obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes Mixed GPS / Galileo observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_Ephemeris& gps_eph,
|
||||
const Gps_CNAV_Ephemeris& gps_cnav_eph,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
double gps_obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes GLONASS GNAV observables into the RINEX file.
|
||||
* Example: glonass_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Glonass_Gnav_Ephemeris& eph,
|
||||
double obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes Mixed GPS L1 C/A - GLONASS observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_Ephemeris& gps_eph,
|
||||
const Glonass_Gnav_Ephemeris& glonass_gnav_eph,
|
||||
double gps_obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes Mixed GPS L2C - GLONASS observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Gps_CNAV_Ephemeris& gps_eph,
|
||||
const Glonass_Gnav_Ephemeris& glonass_gnav_eph,
|
||||
double gps_obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes Mixed Galileo/GLONASS observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Galileo_Ephemeris& galileo_eph,
|
||||
const Glonass_Gnav_Ephemeris& glonass_gnav_eph,
|
||||
double galileo_obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Writes BDS B1I observables into the RINEX file
|
||||
*/
|
||||
void log_rinex_obs(std::fstream& out,
|
||||
const Beidou_Dnav_Ephemeris& eph,
|
||||
double obs_time,
|
||||
const Constellation_Observables_Map& constel_observables) const;
|
||||
|
||||
/*
|
||||
* Generates the GPS L1 C/A Navigation Data header
|
||||
*/
|
||||
@@ -528,47 +419,12 @@ private:
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Galileo_Ephemeris>& eph_map) const;
|
||||
|
||||
/*
|
||||
* Writes data from the Mixed (GPS/Galileo) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Gps_Ephemeris>& gps_eph_map,
|
||||
const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map);
|
||||
|
||||
/*
|
||||
* Writes data from the Mixed (GPS/Galileo) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Gps_CNAV_Ephemeris>& gps_cnav_eph_map,
|
||||
const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map);
|
||||
|
||||
/*
|
||||
* Writes data from the GLONASS GNAV navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Glonass_Gnav_Ephemeris>& eph_map) const;
|
||||
|
||||
/*
|
||||
* Writes data from the Mixed (GPS/GLONASS GNAV) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Gps_Ephemeris>& gps_eph_map,
|
||||
const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map) const;
|
||||
|
||||
/*
|
||||
* Writes data from the Mixed (GPS/GLONASS GNAV) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Gps_CNAV_Ephemeris>& gps_cnav_eph_map,
|
||||
const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map);
|
||||
|
||||
/*
|
||||
* Writes data from the Mixed (Galileo/ GLONASS GNAV) navigation message into the RINEX file
|
||||
*/
|
||||
void log_rinex_nav(std::fstream& out,
|
||||
const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map,
|
||||
const std::map<int32_t, Glonass_Gnav_Ephemeris>& glonass_gnav_eph_map);
|
||||
|
||||
/*
|
||||
* Writes data from the Beidou B1I navigation message into the RINEX file
|
||||
*/
|
||||
@@ -613,13 +469,6 @@ private:
|
||||
*/
|
||||
boost::posix_time::ptime compute_UTC_time(const Glonass_Gnav_Ephemeris& eph, double obs_time) const;
|
||||
|
||||
/*
|
||||
* Computes number of leap seconds of GPS relative to UTC
|
||||
* \param eph GLONASS GNAV Ephemeris object
|
||||
* \param gps_obs_time Observation time in GPS seconds of week
|
||||
*/
|
||||
double get_leap_second(const Glonass_Gnav_Ephemeris& eph, double gps_obs_time) const;
|
||||
|
||||
/*
|
||||
* Represents GPS time in the date time format. Leap years are considered, but leap seconds are not.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user