Changeset 9889 in ntrip
- Timestamp:
- Nov 22, 2022, 1:49:32 PM (22 months ago)
- Location:
- trunk/BNC/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/bncmain.cpp
r9866 r9889 230 230 " PPP/snxtroIntr {SINEX troposphere file interval [character string: 1 min|2 min|5 min|10 min|15 min|30 min|1 hour|1 day]}\n" 231 231 " PPP/snxtroSampl {SINEX troposphere file sampling rate [character string: 1 sec|5 sec|10 sec|30 sec|60 sec|300 sec]}\n" 232 " PPP/snxtroAc {SINEX troposphere Analysis Center [ character string]}\n"233 " PPP/snxtroSol {SINEX troposphere solution ID [ character string]}\n"232 " PPP/snxtroAc {SINEX troposphere Analysis Center [3-char string]}\n" 233 " PPP/snxtroSol {SINEX troposphere solution ID [1-char]}\n" 234 234 "\n" 235 235 "PPP Client Panel 2 keys:\n" -
trunk/BNC/src/bncoutf.cpp
r9783 r9889 155 155 addition = QString("_ABS"); 156 156 } 157 if (_extension.contains("tro") || _extension.contains("TRO")) { 158 QString site = baseName.left(9); 159 bncSettings settings; 160 QString ac = settings.value("PPP/snxtroAc").toString(); 161 QString sol = settings.value("PPP/snxtroSol").toString(); 162 baseName.replace(0,3,ac); 163 baseName.replace(3,1,sol); 164 baseName.replace(4,3,"DEM"); 165 baseName.replace(7,3,"RTS"); 166 addition = QString("_%1_TRO").arg(site); 167 } 157 168 if (_extension.count(".") == 2) { 158 169 _extension.replace(0,1,"_"); -
trunk/BNC/src/bncsinextro.cpp
r9424 r9889 31 31 : bncoutf(sklFileName, intr, sampl) { 32 32 33 _opt 33 _opt = opt; 34 34 _sampl = sampl; 35 35 … … 81 81 QString epo = QString("%1").arg(numEpochs, 5, 10, QLatin1Char('0')); 82 82 QString ac = QString("%1").arg(settings.value("PPP/snxtroAc").toString(),3,QLatin1Char(' ')); 83 QString sol = QString("%1").arg(settings.value("PPP/snxtroSol").toString(),4,QLatin1Char(' ')); 84 QString corr = settings.value("PPP/corrMount").toString(); 83 QString sol = QString(" %1").arg(settings.value("PPP/snxtroSol").toString(),1,QLatin1Char(' ')); 84 QString corr = ""; 85 if (settings.value("PPP/dataSource").toString() == "Real-Time Streams") { 86 corr = settings.value("PPP/corrMount").toString(); 87 } 88 else if (settings.value("PPP/dataSource").toString() == "RINEX Files") { 89 corr = settings.value("PPP/corrFile").toString(); 90 } 91 92 QString signalPriorities = QString::fromStdString(_opt->_signalPriorities); 93 if (!signalPriorities.size()) { 94 signalPriorities = "G:12&CWPSLX R:12&CP E:1&CBX E:5&QIX C:26&IQX"; 95 } 96 QStringList priorList = signalPriorities.split(" ", QString::SkipEmptyParts); 97 QStringList frqStrList; 98 for (unsigned iFreq = 1; iFreq < t_frequency::max; iFreq++) { 99 t_frequency::type frqType = static_cast<t_frequency::type>(iFreq); 100 char frqSys = t_frequency::toString(frqType)[0]; 101 char frqNum = t_frequency::toString(frqType)[1]; 102 QStringList hlp; 103 for (int ii = 0; ii < priorList.size(); ii++) { 104 if (priorList[ii].indexOf(":") != -1) { 105 hlp = priorList[ii].split(":", QString::SkipEmptyParts); 106 if (hlp.size() == 2 && hlp[0].length() == 1 && hlp[0][0] == frqSys) { 107 hlp = hlp[1].split("&", QString::SkipEmptyParts); 108 } 109 if (hlp.size() == 2 && hlp[0].indexOf(frqNum) != -1) { 110 frqStrList.append(QString("%1%2").arg(frqSys).arg(frqNum)); 111 } 112 } 113 } 114 } 85 115 86 116 _out << "%=TRO 2.00 " << ac.toStdString() << " " … … 93 123 _out << " OUTPUT " << "Total Troposphere Zenith Path Delay Product" << endl; 94 124 _out << " SOFTWARE " << BNCPGMNAME << endl; 95 _out << " INPUT " << " Ntrip streams, additional Orbit and Clock information from "96 << corr.toStdString() <<endl;125 _out << " INPUT " << "Observations_: " << _opt->_roverName.substr(0,9) 126 << ", SSR corrections: " << corr.toStdString() << endl; 97 127 _out << "-FILE/REFERENCE" << endl << endl; 98 128 … … 114 144 } 115 145 _out << "+SITE/ID" << endl; 116 _out << "*CODE PT DOMES____ T _STATION DESCRIPTION__ APPROX_LON_ APPROX_LAT_ _APP_H_" << endl;117 _out << " " << _opt->_roverName.substr(0, 4) << " A P "146 _out << "*CODE PT DOMES____ T _STATION DESCRIPTION__ APPROX_LON_ APPROX_LAT_ _APP_H_" << endl; 147 _out << " " << _opt->_roverName.substr(0,9) << " A P " 118 148 << country.toStdString() << " " 119 149 << QString(" %1").arg(lonD, 3, 10, QLatin1Char(' ')).toStdString() … … 129 159 if (!_opt->_recNameRover.empty()) { 130 160 _out << "+SITE/RECEIVER" << endl; 131 _out << "*SITE PT SOLN T DATA_START__ DATA_END____ DESCRIPTION_________ S/N__ FIRMWARE___" << endl;132 _out << " " << _opt->_roverName.substr(0, 4) << " A " << sol.toStdString() << " P "161 _out << "*SITE PT SOLN T DATA_START__ DATA_END____ DESCRIPTION_________ S/N__ FIRMWARE___" << endl; 162 _out << " " << _opt->_roverName.substr(0,9) << " A " << sol.toStdString() << " P " 133 163 << startTime.toStdString() << " " << endTime.toStdString() 134 164 << QString(" %1").arg(_opt->_recNameRover.c_str(), 20,QLatin1Char(' ')).toStdString() … … 138 168 139 169 _out << "+SITE/ANTENNA" << endl; 140 _out << "*SITE PT SOLN T DATA_START__ DATA_END____ DESCRIPTION_________ S/N__" << endl;141 _out << " " << _opt->_roverName.substr(0, 4) << " A " << sol.toStdString() << " P "170 _out << "*SITE PT SOLN T DATA_START__ DATA_END____ DESCRIPTION_________ S/N__" << endl; 171 _out << " " << _opt->_roverName.substr(0,9) << " A " << sol.toStdString() << " P " 142 172 << startTime.toStdString() << " " << endTime.toStdString() << " " 143 173 << _opt->_antNameRover << " -----" << endl; … … 151 181 _out << "*DESCRIPTION_________ S/N__ L1->ARP(m)__________ L2->ARP(m)__________ AZ_EL____" << endl; 152 182 _out << QString(" %1").arg(_opt->_antNameRover.c_str(), 20,QLatin1Char(' ')).toStdString() 153 << " -----" 154 << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::G1).toStdString() 155 << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::G2).toStdString() 156 << " ---------" 157 << endl; 183 << " -----"; 184 for (int i = 0; i < frqStrList.size(); ++i) { 185 if (frqStrList.at(i).contains('G')) {//cout << frqStrList.at(i).toStdString() << endl; 186 _out << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::toInt(frqStrList.at(i).toStdString())).toStdString(); 187 } 188 } 189 _out << " ---------" << endl; 158 190 _out << "-SITE/GPS_PHASE_CENTER" << endl << endl; 159 191 } … … 163 195 _out << "*DESCRIPTION_________ S/N__ L1->ARP(m)__________ L2->ARP(m)__________ AZ_EL____" << endl; 164 196 _out << QString(" %1").arg(_opt->_antNameRover.c_str(), 20,QLatin1Char(' ')).toStdString() 165 << " -----" 166 << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::R1).toStdString() 167 << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::R2).toStdString() 168 << " ---------" 169 << endl; 197 << " -----"; 198 for (int i = 0; i < frqStrList.size(); ++i) { 199 if (frqStrList.at(i).contains('R')) {//cout << frqStrList.at(i).toStdString() << endl; 200 _out << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::toInt(frqStrList.at(i).toStdString())).toStdString(); 201 } 202 } 203 _out << " ---------" << endl; 170 204 _out << "-SITE/GLONASS_PHASE_CENTER" << endl << endl; 171 205 } … … 175 209 _out << "*DESCRIPTION_________ S/N__ L1->ARP(m)__________ L2->ARP(m)__________ AZ_EL____" << endl; 176 210 _out << QString(" %1").arg(_opt->_antNameRover.c_str(), 20,QLatin1Char(' ')).toStdString() 177 << " -----" 178 << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::E1).toStdString() 179 << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::E5).toStdString() 180 << endl; 211 << " -----"; 212 for (int i = 0; i < frqStrList.size(); ++i) { 213 if (frqStrList.at(i).contains('E')) {//cout << frqStrList.at(i).toStdString() << endl; 214 _out << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::toInt(frqStrList.at(i).toStdString())).toStdString(); 215 } 216 } 217 _out << " ---------" << endl; 181 218 _out << "-SITE/GALILEO_PHASE_CENTER" << endl << endl; 182 219 } … … 186 223 _out << "*DESCRIPTION_________ S/N__ L1->ARP(m)__________ L2->ARP(m)__________ AZ_EL____" << endl; 187 224 _out << QString(" %1").arg(_opt->_antNameRover.c_str(), 20,QLatin1Char(' ')).toStdString() 188 << " -----" 189 << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::C2).toStdString() 190 << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::C6).toStdString() 191 << endl; 225 << " -----"; 226 for (int i = 0; i < frqStrList.size(); ++i) { 227 if (frqStrList.at(i).contains('C')) {//cout << frqStrList.at(i).toStdString() << endl; 228 _out << _antex->pcoSinexString(_opt->_antNameRover, t_frequency::toInt(frqStrList.at(i).toStdString())).toStdString(); 229 } 230 } 231 _out << " ---------" << endl; 192 232 _out << "-SITE/BEIDOU_PHASE_CENTER" << endl << endl; 193 233 } … … 198 238 _out << "+SITE/ECCENTRICITY" << endl; 199 239 _out << "* UP______ NORTH___ EAST____" << endl; 200 _out << "*SITE PT SOLN T DATA_START__ DATA_END____ AXE ARP->BENCHMARK(M)_________" << endl;201 _out << " " << _opt->_roverName.substr(0, 4) << " A " << sol.toStdString() << " P "240 _out << "*SITE PT SOLN T DATA_START__ DATA_END____ AXE ARP->BENCHMARK(M)_________" << endl; 241 _out << " " << _opt->_roverName.substr(0,9) << " A " << sol.toStdString() << " P " 202 242 << startTime.toStdString() << " " << endTime.toStdString() << " UNE" 203 243 << QString("%1").arg(_opt->_neuEccRover(3), 9, 'f', 4, QLatin1Char(' ')).toStdString() … … 207 247 208 248 _out << "+TROP/COORDINATES" << endl; 209 _out << "*SITE PT SOLN T STA_X_______ STA_Y_______ STA_Z_______ SYSTEM REMARK" << endl;210 _out << " " << _opt->_roverName.substr(0, 4) << " A " << sol.toStdString() << " P"249 _out << "*SITE PT SOLN T STA_X_______ STA_Y_______ STA_Z_______ SYSTEM REMARK" << endl; 250 _out << " " << _opt->_roverName.substr(0,9) << " A " << sol.toStdString() << " P" 211 251 << QString(" %1").arg(_opt->_xyzAprRover(1), 12, 'f', 3, QLatin1Char(' ')).toStdString() 212 252 << QString(" %1").arg(_opt->_xyzAprRover(2), 12, 'f', 3, QLatin1Char(' ')).toStdString() 213 253 << QString(" %1").arg(_opt->_xyzAprRover(3), 12, 'f', 3, QLatin1Char(' ')).toStdString() 214 << " I TRF14" << ac.toStdString() << endl;254 << " IGS20 " << ac.toStdString() << endl; 215 255 _out << "-TROP/COORDINATES"<< endl << endl; 216 256 … … 228 268 229 269 _out << "+TROP/SOLUTION" << endl; 230 _out << "*SITE EPOCH_______ TROTOT STDEV" << endl;270 _out << "*SITE EPOCH_______ TROTOT STDEV" << endl; 231 271 } 232 272 … … 246 286 if ((reopen(GPSWeek, GPSWeeks) == success) && 247 287 (fmod(daysec, double(_sampl)) == 0.0)) { 248 _out << ' ' << staID.left( 4).data() << ' ' << time.toStdString() << ' '288 _out << ' ' << staID.left(9).data() << ' ' << time.toStdString() << ' ' 249 289 << noshowpos << setw(6) << setprecision(1) << trotot * 1000.0 250 290 << noshowpos << setw(6) << setprecision(1) << stdev * 1000.0 << endl; -
trunk/BNC/src/bncwindow.cpp
r9866 r9889 1467 1467 _pppWidgets._corrFile->setWhatsThis(tr("<p>Specify the Broadcast Ephemeris Corrections file as saved beforehand using BNC.</p><p>If you don't specify corrections by this option, BNC will fall back to Single Point Positioning (SPP, positioning from RINEX Obs and RINEX Nav files only) instead of doing PPP. <i>[key: PPP/corrFile]</i></p>")); 1468 1468 _pppWidgets._ionoFile->setWhatsThis(tr("<p>Specify the VTEC file as saved beforehand using BNC.</p><p>If you don't specify corrections by this option, BNC will use VTEC informations from the Corrections file, if available. <i>[key: PPP/ionoFile]</i></p>")); 1469 _pppWidgets._antexFile->setWhatsThis(tr("<p>Observations in RTCM streams or RINEX files should be referred to the receiver's and to the satellite's Antenna Phase Center (APC) and therefore be corrected for<ul><li>Receiver APC offsets</li><li>Receiver APC variations</li><li>Satellite APC offsets.</li></ul> Specify the full path to an IGS 'ANTEX file' which contains APC offsets and variations.</p><p>If you don't specify an 'ANTEX file' then observations will not be corrected for APC offsets and variations. <i>[key: PPP/antexFile]</i></p>")); 1470 _pppWidgets._crdFile->setWhatsThis(tr("<p>Enter the full path to an ASCII file which specifies the streams or files of those stations you want to process. Specifying a 'Coordinates file' is optional. If it exists, it should contain one record per station with the following parameters separated by blank character:<p><ul><li>Specify the station either by<ul><li>the 'Mountpoint' of the station's RTCM stream (when in real-time PPP mode), or</li><li>the 4-charater station ID of the RINEX Observations file (when in post processing PPP mode).</li></ul></li><li>Approximate X,Y,Z coordinate of station's Antenna Reference Point [m] (ARP, specify '0.0 0.0 0.0' if unknown).</li><li>North, East and Up component of antenna eccentricity [m] (specify '0.0 0.0 0.0' if unknown).</li><li>20 Characters describing the antenna type and radome following the IGS 'ANTEX file' standard (leave blank if unknown).</li><li>Receiver type following the naming conventions for IGS equipment.</li></ul></p><p>Records with exclamation mark '!' in the first column or blank records will be interpreted as comment lines and ignored. <i>[key: PPP/crdFile]</i></p>")); 1471 _pppWidgets._logPath->setWhatsThis(tr("<p>Specify a directory for saving daily PPP logfiles. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no PPP logficorrMountles shall be produced. <i>[key: PPP/logPath]</i></p>")); 1469 _pppWidgets._antexFile->setWhatsThis(tr("<p>Observations in RTCM streams or RINEX files should be referred to the receiver's and to the satellite's Antenna Phase Center (APC) and therefore be corrected for<ul><li>Receiver APC offsets and variations</li><li>Satellite APC offsets and variations.</li></ul> Specify the full path to an IGS 'ANTEX file' which contains APC offsets and variations for satellites and receiver.</p> <i>[key: PPP/antexFile]</i></p>")); 1470 _pppWidgets._crdFile->setWhatsThis(tr("<p>Enter the full path to an ASCII file which specifies the streams or files of those stations you want to process. Specifying a 'Coordinates file' is optional. If it exists, it should contain one record per station with the following parameters separated by blank character:</p><ul><li>Specify the station either by:<ul><li>the 'Mountpoint' of the station's RTCM stream (in real-time PPP mode), or</li><li>the 9-char station ID of the RINEX Version 3 or 4 Observations file (in post processing PPP mode), or </li><li>the 4-char station ID of the RINEX Version 2 Observations file (in post processing PPP mode).</li></ul><li>Approximate X,Y,Z coordinate of station's Antenna Reference Point [m] (ARP, specify '0.0 0.0 0.0' if unknown).</li><li>North, East and Up component of antenna eccentricity [m] (specify '0.0 0.0 0.0' if unknown). </li><li>20 Characters describing the antenna type and radome following the IGS 'ANTEX file' standard (leave blank if unknown).</li><li>Receiver type following the naming conventions for IGS equipment.</li></ul>Records with exclamation mark '!' in the first column or blank records will be interpreted as comment lines and ignored.. <i>[key: PPP/crdFile]</i></p>")); 1471 _pppWidgets._blqFile->setWhatsThis(tr("<p>Specify the full path to a 'BLQ file' containing the ocean loading coefficients for different stations. These coefficients can be obtained from the ocean loading service under request trough the web site http://holt.oso.chalmers.se/loading/. <i>[key: PPP/blqFile]</i></p>")); 1472 _pppWidgets._logPath->setWhatsThis(tr("<p>Specify a directory for saving daily PPP logfiles. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no PPP logfiles shall be produced. <i>[key: PPP/logPath]</i></p>")); 1472 1473 _pppWidgets._nmeaPath->setWhatsThis(tr("<p>Specify a directory for saving coordinates in daily NMEA files. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no NMEA file shall be produced. <i>[key: PPP/nmeaPath]</i></p>")); 1473 1474 _pppWidgets._snxtroPath->setWhatsThis(tr("<p>Specify a directory for saving SINEX Troposphere files. If the specified directory does not exist, BNC will not create such files.</p><p>Default is an empty option field, meaning that no SINEX Troposphere files shall be produced. <i>[key: PPP/snxtroPath]</i></p>")); … … 1475 1476 _pppWidgets._snxtroSampl->setWhatsThis(tr("<p>Select a 'Sampling' rate for saving troposphere parameters. <i>[key: PPP/snxtroSampl]</i></p>")); 1476 1477 _pppWidgets._snxtroAc->setWhatsThis(tr("<p>Specify a 3-character abbreviation describing you as the generating Analysis Center (AC) in your SINEX troposphere files. <i>[key: PPP/snxtroAc]</i></p>")); 1477 _pppWidgets._snxtroSol->setWhatsThis(tr("<p>Specify a 4-character solution ID to allow a distinction between different solutions per AC. <i>[key: PPP/snxtroSol]</i></p>"));1478 _pppWidgets._snxtroSol->setWhatsThis(tr("<p>Specify a 1-character solution ID to allow a distinction between different solutions per AC. <i>[key: PPP/snxtroSol]</i></p>")); 1478 1479 1479 1480 … … 1484 1485 _pppWidgets._lcGalileo->setWhatsThis(tr("<p>Specify which kind of Galileo observations you want to use</p><p><ul><li>Specifying 'Pi' means that you request BNC to use code data of two frequencies.</li><li>Specifying'Li' means that you request BNC to use phase data of two frequencies.</li> <li>Specifying'Pi&Li' means that you request BNC to use both, code and phase data of two frequencies.</li></ul></p><p>Specifying 'no' means that you don't want BNC to use Galileo data. <i>[key: PPP/lcGalileo]</i></p>")); 1485 1486 _pppWidgets._lcBDS->setWhatsThis(tr("<p>Specify which kind of BDS observations you want to use</p><p><ul><li>Specifying 'Pi' means that you request BNC to use code data from two frequencies.</li><li>Specifying'Li' means that you request BNC to use phase data of two frequencies.</li> <li>Specifying'Pi&Li' means that you request BNC to use both, code and phase data of two frequencies.</li></ul></p><p>Specifying 'no' means that you don't want BNC to use BDS data. <i>[key: PPP/lcBDS]</i></p>")); 1486 _pppWidgets._modelObs->setWhatsThis(tr("<p>Specify which kind of PPP model you want to use:</p><p><ul><li> Iopnosphere-free PPP</li><li>Uncombined PPP</li><li>PPP-RTK (recommended for test purposes onlybecause of an incomplete standardized SSR model)</li><li>DCM with Code or Phase Biases</li><li></p><p>[key: PPP/modelObs]</i></p>"));1487 _pppWidgets._pseudoObs->setWhatsThis(tr("<p>Specify wh ich kind of pseudo observations you want to use. Please note, pseudo observations regarding the Ionosphere areuseful, as soon as the ionospheric information is more accurate than the code data accuracy. <i>[key: PPP/pseudoObs]</i></p>"));1487 _pppWidgets._modelObs->setWhatsThis(tr("<p>Specify which kind of PPP model you want to use:</p><p><ul><li>Uncombined PPP</li><li>Iopnosphere-free PPP</li><li>PPP-RTK (currently not activated because of an incomplete standardized SSR model)</li><li>DCM with Code or Phase Biases</li><li></p><p>[key: PPP/modelObs]</i></p>")); 1488 _pppWidgets._pseudoObs->setWhatsThis(tr("<p>Specify whether pseudo observations regarding the Ionosphere shall be used. Please note, this is useful, as soon as the ionospheric information is more accurate than the code data accuracy. <i>[key: PPP/pseudoObs]</i></p>")); 1488 1489 _pppWidgets._sigmaC1->setWhatsThis(tr("<p>Enter a Sigma for GPS C1 code observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GPS C1 code observations to a PPP solution from combined code and phase data. 2.0 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma C1 = 2.0' <i>[key: PPP/sigmaC1]</i></p>")); 1489 1490 _pppWidgets._sigmaL1->setWhatsThis(tr("<p>Enter a Sigma for GPS L1 phase observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GPS L1 phase observations to a PPP solutions from combined code and phase data. 0.02 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma L1 = 0.02' <i>[key: PPP/sigmaL1]</i></p>")); -
trunk/BNC/src/pppRun.cpp
r9854 r9889 222 222 snxtroFileSkl += QDir::separator(); 223 223 } 224 snxtroFileSkl = snxtroFileSkl + ID9 + "${V3PROD}" + distStr + ".tra";224 snxtroFileSkl = snxtroFileSkl + ID9 + '_' + "${V3PROD}" + distStr + ".tro"; 225 225 sampl = settings.value("PPP/snxtroSampl").toString().split("sec").first().toInt(); 226 226 intr = settings.value("PPP/snxtroIntr").toString();
Note:
See TracChangeset
for help on using the changeset viewer.