Changeset 9889 in ntrip for trunk/BNC/src
- Timestamp:
- Nov 22, 2022, 1:49:32 PM (2 years 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>UncombinedPPP</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 ofpseudo observationsyou 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 + ".tr a";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.