mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-14 20:20:35 +00:00
Introducing RINEX Galileo navigation data file.
This commit is contained in:
parent
b770a5137e
commit
f6a55955ae
@ -179,35 +179,35 @@ int galileo_e1_pvt_cc::general_work (int noutput_items, gr_vector_int &ninput_it
|
|||||||
//ToDo: Implement Galileo RINEX and Galileo NMEA outputs
|
//ToDo: Implement Galileo RINEX and Galileo NMEA outputs
|
||||||
// d_nmea_printer->Print_Nmea_Line(d_ls_pvt, d_flag_averaging);
|
// d_nmea_printer->Print_Nmea_Line(d_ls_pvt, d_flag_averaging);
|
||||||
//
|
//
|
||||||
// if (!b_rinex_header_writen) // & we have utc data in nav message!
|
if (!b_rinex_header_writen) // & we have utc data in nav message!
|
||||||
// {
|
{
|
||||||
// std::map<int,Galileo_Ephemeris>::iterator galileo_ephemeris_iter;
|
std::map<int,Galileo_Ephemeris>::iterator galileo_ephemeris_iter;
|
||||||
|
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
|
||||||
|
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
//rp->rinex_obs_header(rp->obsFile, galileo_ephemeris_iter->second, d_rx_time);
|
||||||
|
rp->rinex_nav_header(rp->navGalFile, d_ls_pvt->galileo_iono, d_ls_pvt->galileo_utc_model);
|
||||||
|
b_rinex_header_writen = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(b_rinex_header_writen) // Put here another condition to separate annotations (e.g 30 s)
|
||||||
|
{
|
||||||
|
// Limit the RINEX navigation output rate to 1/6 seg
|
||||||
|
// Notice that d_sample_counter period is 4ms (for Galileo correlators)
|
||||||
|
if ((d_sample_counter - d_last_sample_nav_output) >= 6000)
|
||||||
|
{
|
||||||
|
rp->log_rinex_nav(rp->navGalFile, d_ls_pvt->galileo_ephemeris_map);
|
||||||
|
d_last_sample_nav_output = d_sample_counter;
|
||||||
|
}
|
||||||
|
// std::map<int, Galileo_Ephemeris>::iterator galileo_ephemeris_iter;
|
||||||
// galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
|
// galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
|
||||||
// if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end())
|
// if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end())
|
||||||
// {
|
// {
|
||||||
// rp->rinex_obs_header(rp->obsFile, galileo_ephemeris_iter->second, d_rx_time);
|
// rp->log_rinex_obs(rp->obsFile, galileo_ephemeris_iter->second, d_rx_time, gnss_pseudoranges_map);
|
||||||
// rp->rinex_nav_header(rp->navFile, d_ls_pvt->galielo_iono, d_ls_pvt->galileo_utc_model);
|
|
||||||
// b_rinex_header_writen = true; // do not write header anymore
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if(b_rinex_header_writen) // Put here another condition to separate annotations (e.g 30 s)
|
|
||||||
// {
|
|
||||||
// // Limit the RINEX navigation output rate to 1/6 seg
|
|
||||||
// // Notice that d_sample_counter period is 1ms (for GPS correlators)
|
|
||||||
// if ((d_sample_counter-d_last_sample_nav_output)>=6000)
|
|
||||||
// {
|
|
||||||
// rp->log_rinex_nav(rp->navFile, d_ls_pvt->gps_ephemeris_map);
|
|
||||||
// d_last_sample_nav_output=d_sample_counter;
|
|
||||||
// }
|
|
||||||
// std::map<int,Gps_Ephemeris>::iterator gps_ephemeris_iter;
|
|
||||||
// gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin();
|
|
||||||
// if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end())
|
|
||||||
// {
|
|
||||||
// rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, d_rx_time, gnss_pseudoranges_map);
|
|
||||||
// }
|
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// DEBUG MESSAGE: Display position in console output
|
// DEBUG MESSAGE: Display position in console output
|
||||||
if (((d_sample_counter % d_display_rate_ms) == 0) and d_ls_pvt->b_valid_position == true)
|
if (((d_sample_counter % d_display_rate_ms) == 0) and d_ls_pvt->b_valid_position == true)
|
||||||
|
@ -42,10 +42,7 @@
|
|||||||
#include <gflags/gflags.h>
|
#include <gflags/gflags.h>
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include "sbas_telemetry_data.h"
|
#include "sbas_telemetry_data.h"
|
||||||
#include "gps_navigation_message.h"
|
|
||||||
#include "gps_ephemeris.h"
|
|
||||||
#include "gps_iono.h"
|
|
||||||
#include "gps_utc_model.h"
|
|
||||||
|
|
||||||
|
|
||||||
using google::LogMessage;
|
using google::LogMessage;
|
||||||
@ -58,10 +55,13 @@ Rinex_Printer::Rinex_Printer()
|
|||||||
navfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_GPS_NAV");
|
navfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_GPS_NAV");
|
||||||
obsfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_OBS");
|
obsfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_OBS");
|
||||||
sbsfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_SBAS");
|
sbsfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_SBAS");
|
||||||
|
navGalfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_GAL_NAV");
|
||||||
|
|
||||||
|
|
||||||
Rinex_Printer::navFile.open(navfilename, std::ios::out | std::ios::app);
|
Rinex_Printer::navFile.open(navfilename, std::ios::out | std::ios::app);
|
||||||
Rinex_Printer::obsFile.open(obsfilename, std::ios::out | std::ios::app);
|
Rinex_Printer::obsFile.open(obsfilename, std::ios::out | std::ios::app);
|
||||||
Rinex_Printer::sbsFile.open(sbsfilename, std::ios::out | std::ios::app);
|
Rinex_Printer::sbsFile.open(sbsfilename, std::ios::out | std::ios::app);
|
||||||
|
Rinex_Printer::navGalFile.open(navGalfilename, std::ios::out | std::ios::app);
|
||||||
|
|
||||||
// RINEX v3.00 codes
|
// RINEX v3.00 codes
|
||||||
satelliteSystem["GPS"] = "G";
|
satelliteSystem["GPS"] = "G";
|
||||||
@ -167,13 +167,15 @@ Rinex_Printer::Rinex_Printer()
|
|||||||
Rinex_Printer::~Rinex_Printer()
|
Rinex_Printer::~Rinex_Printer()
|
||||||
{
|
{
|
||||||
// close RINEX files
|
// close RINEX files
|
||||||
long posn, poso, poss;
|
long posn, poso, poss, posng;
|
||||||
posn = navFile.tellp();
|
posn = navFile.tellp();
|
||||||
poso = obsFile.tellp();
|
poso = obsFile.tellp();
|
||||||
poss = obsFile.tellp();
|
poss = obsFile.tellp();
|
||||||
|
posng = navGalFile.tellp();
|
||||||
Rinex_Printer::navFile.close();
|
Rinex_Printer::navFile.close();
|
||||||
Rinex_Printer::obsFile.close();
|
Rinex_Printer::obsFile.close();
|
||||||
Rinex_Printer::sbsFile.close();
|
Rinex_Printer::sbsFile.close();
|
||||||
|
Rinex_Printer::navGalFile.close();
|
||||||
// If nothing written, erase the files.
|
// If nothing written, erase the files.
|
||||||
if (posn == 0)
|
if (posn == 0)
|
||||||
{
|
{
|
||||||
@ -187,6 +189,10 @@ Rinex_Printer::~Rinex_Printer()
|
|||||||
{
|
{
|
||||||
remove(sbsfilename.c_str());
|
remove(sbsfilename.c_str());
|
||||||
}
|
}
|
||||||
|
if (posng == 0)
|
||||||
|
{
|
||||||
|
remove(navGalfilename.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -353,6 +359,108 @@ std::string Rinex_Printer::getLocalTime()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Rinex_Printer::rinex_nav_header(std::ofstream& out, Galileo_Iono iono, Galileo_Utc_Model utc_model)
|
||||||
|
{
|
||||||
|
|
||||||
|
std::string line;
|
||||||
|
stringVersion = "3.01";
|
||||||
|
version = 3;
|
||||||
|
|
||||||
|
// -------- Line 1
|
||||||
|
line = std::string(5, ' ');
|
||||||
|
line += stringVersion;
|
||||||
|
line += std::string(11, ' ');
|
||||||
|
line += std::string("N: GNSS NAV DATA");
|
||||||
|
line += std::string(4, ' ');
|
||||||
|
line += std::string("E: GALILEO");
|
||||||
|
line += std::string(10, ' ');
|
||||||
|
line += std::string("RINEX VERSION / TYPE");
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
// -------- Line 2
|
||||||
|
line.clear();
|
||||||
|
line += Rinex_Printer::getLocalTime();
|
||||||
|
line += std::string("PGM / RUN BY / DATE");
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
// -------- Line COMMENT
|
||||||
|
line.clear();
|
||||||
|
line += Rinex_Printer::leftJustify("GALILEO NAVIGATION MESSAGE FILE GENERATED BY GNSS-SDR", 60);
|
||||||
|
line += Rinex_Printer::leftJustify("COMMENT", 20);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
// -------- Line COMMENT
|
||||||
|
line.clear();
|
||||||
|
line += Rinex_Printer::leftJustify("See http://gnss-sdr.org", 60);
|
||||||
|
line += Rinex_Printer::leftJustify("COMMENT", 20);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
// -------- Line ionospheric info 1
|
||||||
|
line.clear();
|
||||||
|
line += std::string("GAL ");
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.ai0_5, 10, 2), 12);
|
||||||
|
line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.ai1_5, 10, 2), 12);
|
||||||
|
line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.ai2_5, 10, 2), 12);
|
||||||
|
double zero = 0.0;
|
||||||
|
line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(zero, 10, 2), 12);
|
||||||
|
line += std::string(7, ' ');
|
||||||
|
line += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
// -------- Line system time correction
|
||||||
|
line.clear();
|
||||||
|
line += std::string("GAUT");
|
||||||
|
line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.A0_6, 16, 2), 18);
|
||||||
|
line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.A1_6, 15, 2), 16);
|
||||||
|
line += Rinex_Printer::rightJustify(boost::lexical_cast<std::string>(utc_model.t0t_6), 7);
|
||||||
|
line += Rinex_Printer::rightJustify(boost::lexical_cast<std::string>(utc_model.WNot_6), 5);
|
||||||
|
line += std::string(10, ' ');
|
||||||
|
line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
// -------- Line system time correction 2
|
||||||
|
/* line.clear();
|
||||||
|
line += std::string("GPGA");
|
||||||
|
line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.XXX, 16, 2), 18);
|
||||||
|
line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.XXX, 15, 2), 16);
|
||||||
|
line += Rinex_Printer::rightJustify(boost::lexical_cast<std::string>(utc_model.XXX), 7);
|
||||||
|
line += Rinex_Printer::rightJustify(boost::lexical_cast<std::string>(utc_model.XXX), 5);
|
||||||
|
line += std::string(10, ' ');
|
||||||
|
line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;*/
|
||||||
|
|
||||||
|
|
||||||
|
// -------- Line 6 leap seconds
|
||||||
|
// For leap second information, see http://www.endruntechnologies.com/leap.htm
|
||||||
|
line.clear();
|
||||||
|
line += Rinex_Printer::rightJustify(boost::lexical_cast<std::string>(utc_model.Delta_tLS_6), 6);
|
||||||
|
line += Rinex_Printer::rightJustify(boost::lexical_cast<std::string>(utc_model.Delta_tLSF_6), 6);
|
||||||
|
line += Rinex_Printer::rightJustify(boost::lexical_cast<std::string>(utc_model.WN_LSF_6), 6);
|
||||||
|
line += Rinex_Printer::rightJustify(boost::lexical_cast<std::string>(utc_model.DN_6), 6);
|
||||||
|
line += std::string(36, ' ');
|
||||||
|
line += Rinex_Printer::leftJustify("LEAP SECONDS", 20);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
// -------- End of Header
|
||||||
|
line.clear();
|
||||||
|
line += std::string(60, ' ');
|
||||||
|
line += Rinex_Printer::leftJustify("END OF HEADER", 20);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
void Rinex_Printer::rinex_nav_header(std::ofstream& out, Gps_Iono iono, Gps_Utc_Model utc_model)
|
void Rinex_Printer::rinex_nav_header(std::ofstream& out, Gps_Iono iono, Gps_Utc_Model utc_model)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -524,7 +632,6 @@ void Rinex_Printer::rinex_nav_header(std::ofstream& out, Gps_Iono iono, Gps_Utc_
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Rinex_Printer::rinex_sbs_header(std::ofstream& out)
|
void Rinex_Printer::rinex_sbs_header(std::ofstream& out)
|
||||||
{
|
{
|
||||||
std::string line;
|
std::string line;
|
||||||
@ -911,6 +1018,158 @@ void Rinex_Printer::log_rinex_nav(std::ofstream& out, std::map<int,Gps_Ephemeris
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Rinex_Printer::log_rinex_nav(std::ofstream& out, std::map<int, Galileo_Ephemeris> eph_map)
|
||||||
|
{
|
||||||
|
std::string line;
|
||||||
|
std::map<int,Galileo_Ephemeris>::iterator galileo_ephemeris_iter;
|
||||||
|
line.clear();
|
||||||
|
for(galileo_ephemeris_iter = eph_map.begin();
|
||||||
|
galileo_ephemeris_iter != eph_map.end();
|
||||||
|
galileo_ephemeris_iter++)
|
||||||
|
{
|
||||||
|
// -------- SV / EPOCH / SV CLK
|
||||||
|
boost::posix_time::ptime p_utc_time = Rinex_Printer::compute_Galileo_time(galileo_ephemeris_iter->second, galileo_ephemeris_iter->second.TOW_5);
|
||||||
|
std::string timestring = boost::posix_time::to_iso_string(p_utc_time);
|
||||||
|
std::string month (timestring, 4, 2);
|
||||||
|
std::string day (timestring, 6, 2);
|
||||||
|
std::string hour (timestring, 9, 2);
|
||||||
|
std::string minutes (timestring, 11, 2);
|
||||||
|
std::string seconds (timestring, 13, 2);
|
||||||
|
|
||||||
|
line += satelliteSystem["Galileo"];
|
||||||
|
if (galileo_ephemeris_iter->second.i_satellite_PRN < 10) line += std::string("0");
|
||||||
|
line += boost::lexical_cast<std::string>(galileo_ephemeris_iter->second.i_satellite_PRN);
|
||||||
|
std::string year (timestring, 0, 4);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += year;
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += month;
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += day;
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += hour;
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += minutes;
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += seconds;
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.af0_4, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.af1_4, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.af2_4, 18, 2);
|
||||||
|
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
// -------- BROADCAST ORBIT - 1
|
||||||
|
line.clear();
|
||||||
|
line += std::string(5, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.IOD_ephemeris, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_rs_3, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.delta_n_3, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.M0_1, 18, 2);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
// -------- BROADCAST ORBIT - 2
|
||||||
|
line.clear();
|
||||||
|
line += std::string(5, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_uc_3, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.e_1, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_us_3, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.A_1, 18, 2);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// -------- BROADCAST ORBIT - 3
|
||||||
|
line.clear();
|
||||||
|
line += std::string(5, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.t0e_1, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_ic_4, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.OMEGA_0_2, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_is_4, 18, 2);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// -------- BROADCAST ORBIT - 4
|
||||||
|
line.clear();
|
||||||
|
line += std::string(5, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.i_0_2, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_rc_3, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.omega_2, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.OMEGA_dot_3, 18, 2);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// -------- BROADCAST ORBIT - 5
|
||||||
|
line.clear();
|
||||||
|
line += std::string(5, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.iDot_2, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
double zero = 0.0;
|
||||||
|
line += Rinex_Printer::doub2for(zero, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
double Galileo_week_continuous_number = (double)(galileo_ephemeris_iter->second.WN_5);
|
||||||
|
line += Rinex_Printer::doub2for(Galileo_week_continuous_number, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(zero, 18, 2);
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
// -------- BROADCAST ORBIT - 6
|
||||||
|
line.clear();
|
||||||
|
line += std::string(5, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(zero, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(zero, 18, 2); //
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(zero, 18, 2); //
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(zero, 18, 2); //
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
// -------- BROADCAST ORBIT - 7
|
||||||
|
line.clear();
|
||||||
|
line += std::string(5, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.TOW_5, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += Rinex_Printer::doub2for(zero, 18, 2);
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += std::string(18, ' '); // spare
|
||||||
|
line += std::string(1, ' ');
|
||||||
|
line += std::string(18, ' '); // spare
|
||||||
|
Rinex_Printer::lengthCheck(line);
|
||||||
|
out << line << std::endl;
|
||||||
|
line.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Rinex_Printer::rinex_obs_header(std::ofstream& out, Gps_Ephemeris eph, double d_TOW_first_observation)
|
void Rinex_Printer::rinex_obs_header(std::ofstream& out, Gps_Ephemeris eph, double d_TOW_first_observation)
|
||||||
{
|
{
|
||||||
@ -1529,6 +1788,20 @@ boost::posix_time::ptime Rinex_Printer::compute_GPS_time(Gps_Ephemeris eph, doub
|
|||||||
return p_time;
|
return p_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
boost::posix_time::ptime Rinex_Printer::compute_Galileo_time(Galileo_Ephemeris eph, double obs_time)
|
||||||
|
{
|
||||||
|
// The RINEX v2.11 v3.00 format uses GPS time for the observations epoch, not UTC time, thus, no leap seconds needed here.
|
||||||
|
// (see Section 3 in http://igscb.jpl.nasa.gov/igscb/data/format/rinex211.txt)
|
||||||
|
// (see Pag. 17 in http://igscb.jpl.nasa.gov/igscb/data/format/rinex300.pdf)
|
||||||
|
// --??? No time correction here, since it will be done in the RINEX processor
|
||||||
|
double galileo_t = obs_time;
|
||||||
|
boost::posix_time::time_duration t = boost::posix_time::millisec((galileo_t + 604800*(double)(eph.WN_5))*1000);
|
||||||
|
boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t);
|
||||||
|
return p_time;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
enum RINEX_enumMarkerType {
|
enum RINEX_enumMarkerType {
|
||||||
|
@ -57,9 +57,11 @@
|
|||||||
#include <sstream> // for stringstream
|
#include <sstream> // for stringstream
|
||||||
#include <iomanip> // for setprecision
|
#include <iomanip> // for setprecision
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||||
#include "gps_navigation_message.h"
|
#include "gps_navigation_message.h"
|
||||||
#include "boost/date_time/posix_time/posix_time.hpp"
|
#include "galileo_navigation_message.h"
|
||||||
#include "GPS_L1_CA.h"
|
#include "GPS_L1_CA.h"
|
||||||
|
#include "Galileo_E1.h"
|
||||||
#include "gnss_synchro.h"
|
#include "gnss_synchro.h"
|
||||||
|
|
||||||
class Sbas_Raw_Msg;
|
class Sbas_Raw_Msg;
|
||||||
@ -84,12 +86,15 @@ public:
|
|||||||
std::ofstream obsFile ; //<! Output file stream for RINEX observation file
|
std::ofstream obsFile ; //<! Output file stream for RINEX observation file
|
||||||
std::ofstream navFile ; //<! Output file stream for RINEX navigation data file
|
std::ofstream navFile ; //<! Output file stream for RINEX navigation data file
|
||||||
std::ofstream sbsFile ; //<! Output file stream for RINEX SBAS raw data file
|
std::ofstream sbsFile ; //<! Output file stream for RINEX SBAS raw data file
|
||||||
|
std::ofstream navGalFile ; //<! Output file stream for RINEX Galileo navigation data file
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Generates the Navigation Data header
|
* \brief Generates the Navigation Data header
|
||||||
*/
|
*/
|
||||||
void rinex_nav_header(std::ofstream& out, Gps_Iono iono, Gps_Utc_Model utc_model);
|
void rinex_nav_header(std::ofstream& out, Gps_Iono iono, Gps_Utc_Model utc_model);
|
||||||
|
|
||||||
|
void rinex_nav_header(std::ofstream& out, Galileo_Iono iono, Galileo_Utc_Model utc_model);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Generates the Observation data header
|
* \brief Generates the Observation data header
|
||||||
*/
|
*/
|
||||||
@ -110,12 +115,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
boost::posix_time::ptime compute_GPS_time(Gps_Ephemeris eph, double obs_time);
|
boost::posix_time::ptime compute_GPS_time(Gps_Ephemeris eph, double obs_time);
|
||||||
|
|
||||||
|
boost::posix_time::ptime compute_Galileo_time(Galileo_Ephemeris eph, double obs_time);
|
||||||
/*!
|
/*!
|
||||||
* \brief Writes data from the navigation message into the RINEX file
|
* \brief Writes data from the navigation message into the RINEX file
|
||||||
*/
|
*/
|
||||||
void log_rinex_nav(std::ofstream& out, std::map<int,Gps_Ephemeris> eph_map);
|
void log_rinex_nav(std::ofstream& out, std::map<int,Gps_Ephemeris> eph_map);
|
||||||
|
|
||||||
|
void log_rinex_nav(std::ofstream& out, std::map<int, Galileo_Ephemeris> eph_map);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Writes observables into the RINEX file
|
* \brief Writes observables into the RINEX file
|
||||||
*/
|
*/
|
||||||
@ -165,6 +172,7 @@ private:
|
|||||||
std::string navfilename;
|
std::string navfilename;
|
||||||
std::string obsfilename;
|
std::string obsfilename;
|
||||||
std::string sbsfilename;
|
std::string sbsfilename;
|
||||||
|
std::string navGalfilename;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generates the data for the PGM / RUN BY / DATE line
|
* Generates the data for the PGM / RUN BY / DATE line
|
||||||
|
Loading…
Reference in New Issue
Block a user