mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 12:40:35 +00:00
Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next
This commit is contained in:
commit
bffcc74290
@ -16,6 +16,7 @@ Next release will have several improvements in different dimensions, addition of
|
|||||||
- Redesign of the time counter for enhanced continuity.
|
- Redesign of the time counter for enhanced continuity.
|
||||||
- Improved flow graph in multisystem configurations: the receiver does not get stalled anymore if no signal is found from the first system.
|
- Improved flow graph in multisystem configurations: the receiver does not get stalled anymore if no signal is found from the first system.
|
||||||
- Improved acquisition and tracking sensitivity.
|
- Improved acquisition and tracking sensitivity.
|
||||||
|
- Added mechanisms for Assisted GNSS, thus shortening the Time-To-First-Fix. Provision of data via XML files or via SUPL v1.0. Documented at https://gnss-sdr.org/docs/sp-blocks/global-parameters/
|
||||||
- Other minor bug fixes.
|
- Other minor bug fixes.
|
||||||
|
|
||||||
|
|
||||||
@ -27,6 +28,7 @@ Next release will have several improvements in different dimensions, addition of
|
|||||||
- New volk_gnsssdr kernels: volk_gnsssdr_16i_xn_resampler_16i_xn.h, volk_gnsssdr_16ic_16i_rotator_dot_prod_16ic_xn.h, volk_gnsssdr_32f_xn_resampler_32f_xn.h, volk_gnsssdr_32fc_32f_rotator_dot_prod_32fc_xn.h
|
- New volk_gnsssdr kernels: volk_gnsssdr_16i_xn_resampler_16i_xn.h, volk_gnsssdr_16ic_16i_rotator_dot_prod_16ic_xn.h, volk_gnsssdr_32f_xn_resampler_32f_xn.h, volk_gnsssdr_32fc_32f_rotator_dot_prod_32fc_xn.h
|
||||||
- Some AVX2 implementations added to the volk_gnsssdr library.
|
- Some AVX2 implementations added to the volk_gnsssdr library.
|
||||||
- Improvement in C++ usage: Use of const container calls when result is immediately converted to a const iterator. Using these members removes an implicit conversion from iterator to const_iterator.
|
- Improvement in C++ usage: Use of const container calls when result is immediately converted to a const iterator. Using these members removes an implicit conversion from iterator to const_iterator.
|
||||||
|
- Output printers can be shut down, with some savings in memory and storage requirements.
|
||||||
- A number of code optimizations here and there.
|
- A number of code optimizations here and there.
|
||||||
|
|
||||||
|
|
||||||
@ -34,7 +36,8 @@ Next release will have several improvements in different dimensions, addition of
|
|||||||
|
|
||||||
- A number of new parameters have been exposed to the configuration system.
|
- A number of new parameters have been exposed to the configuration system.
|
||||||
- Possibility to choose Pilot or Data component for tracking of GPS L5 and Galileo E5a signals.
|
- Possibility to choose Pilot or Data component for tracking of GPS L5 and Galileo E5a signals.
|
||||||
- Enabled extended coherent integration times.
|
- Enabled extended coherent integration times for signal tracking.
|
||||||
|
- Configurable coherent and/or non-coherent signal acquisition.
|
||||||
- Some configuration parameters can now be overridden by commandline flags for easier use in scripts.
|
- Some configuration parameters can now be overridden by commandline flags for easier use in scripts.
|
||||||
|
|
||||||
|
|
||||||
@ -48,11 +51,15 @@ Next release will have several improvements in different dimensions, addition of
|
|||||||
- Added five more signal sources: "Fmcomms2_Signal_Source" (requires gr-iio), "Plutosdr_Signal Source" (requires gr-iio), "Spir_GSS6450_File_Signal_Source", "Labsat_Signal_Source" and "Custom_UDP_Signal_Source" (requires libpcap). Documented in https://gnss-sdr.org/docs/sp-blocks/signal-source/
|
- Added five more signal sources: "Fmcomms2_Signal_Source" (requires gr-iio), "Plutosdr_Signal Source" (requires gr-iio), "Spir_GSS6450_File_Signal_Source", "Labsat_Signal_Source" and "Custom_UDP_Signal_Source" (requires libpcap). Documented in https://gnss-sdr.org/docs/sp-blocks/signal-source/
|
||||||
- Improved support for BladeRF, HackRF and RTL-SDR front-ends.
|
- Improved support for BladeRF, HackRF and RTL-SDR front-ends.
|
||||||
- Added tools for the interaction with front-ends based on the AD9361 chipset.
|
- Added tools for the interaction with front-ends based on the AD9361 chipset.
|
||||||
- Intermediate results are now saved in .mat binary format, readable from Matlab/Octave and from Python via h5py.
|
- Intermediate results are now saved in MAT-file format (.mat), readable from Matlab/Octave and from Python via h5py.
|
||||||
- Added the GPX output format.
|
- Added the GPX output format.
|
||||||
- Fixed a bug in the format of NMEA sentences when latitude or longitude minutes were >10.
|
- Improvements in the generation of KML files.
|
||||||
|
- Improvements in the NMEA output. The receiver can produce GPGGA, GPRMC, GPGSA, GPGSV, GAGSA and GAGSV sentences.
|
||||||
- Improvements in the RTCM server stability.
|
- Improvements in the RTCM server stability.
|
||||||
- Improvements in the correctness of generated RINEX files.
|
- Improvements in the correctness of generated RINEX files.
|
||||||
|
- The receiver can read and make use of Galileo almanac XML files published by the European GNSS Service Centre at https://www.gsc-europa.eu/system-status/almanac-data
|
||||||
|
- Own-defined XML schemas for navigation data published at https://github.com/gnss-sdr/gnss-sdr/tree/next/docs/xml-schemas
|
||||||
|
- Added program rinex2assist to convert RINEX navigation files into XML files usable for Assisted GNSS. Only available building from source. See https://github.com/gnss-sdr/gnss-sdr/tree/next/src/utils/rinex2assist
|
||||||
|
|
||||||
|
|
||||||
### Improvements in Maintainability:
|
### Improvements in Maintainability:
|
||||||
@ -64,6 +71,8 @@ Next release will have several improvements in different dimensions, addition of
|
|||||||
- Improvement in C++ usage: The override special identifier is now used when overriding a virtual function. This helps the compiler to check for type changes in the base class, making the detection of errors easier.
|
- Improvement in C++ usage: The override special identifier is now used when overriding a virtual function. This helps the compiler to check for type changes in the base class, making the detection of errors easier.
|
||||||
- Improvement in C++ usage: A number of unused includes have been removed. Order of includes set to: local (in-source) headers, then library headers, then system headers. This helps to detect missing includes.
|
- Improvement in C++ usage: A number of unused includes have been removed. Order of includes set to: local (in-source) headers, then library headers, then system headers. This helps to detect missing includes.
|
||||||
- Improvement in C++ usage: Enhanced const correctness. Misuses of those variables are detected by the compiler.
|
- Improvement in C++ usage: Enhanced const correctness. Misuses of those variables are detected by the compiler.
|
||||||
|
- Applied some style rules to CMake scripts.
|
||||||
|
- Minimal versions of dependencies identified and detected.
|
||||||
|
|
||||||
|
|
||||||
### Improvements in Portability:
|
### Improvements in Portability:
|
||||||
@ -76,15 +85,16 @@ Next release will have several improvements in different dimensions, addition of
|
|||||||
- The Ninja build system can be used in replacement of make.
|
- The Ninja build system can be used in replacement of make.
|
||||||
- The volk_gnsssdr library can be built using Python 2.7 or Python 3.6.
|
- The volk_gnsssdr library can be built using Python 2.7 or Python 3.6.
|
||||||
- The volk_gnsssdr library is now ready for AArch64 NEON instructions.
|
- The volk_gnsssdr library is now ready for AArch64 NEON instructions.
|
||||||
- Ready for GNU Radio 3.8 C++ API (as per current next branch of GNU Radio upstream repository).
|
- Ready for GNU Radio 3.8 C++ API (as per current master branch of GNU Radio upstream repository).
|
||||||
- Improved detection of required and optional dependencies in many GNU/Linux distributions and processor architectures.
|
- Improved detection of required and optional dependencies in many GNU/Linux distributions and processor architectures.
|
||||||
- Improvement in C++ usage: The <ctime> library has been replaced by the more modern and portable <chrono>.
|
- Improvement in C++ usage: The <ctime> library has been replaced by the more modern and portable <chrono> (except for the interaction with RTKLIB).
|
||||||
- Improvement in C++ usage: The <stdio.h> library has been replaced by the more modern and portable <fstream> for file handling.
|
- Improvement in C++ usage: The <stdio.h> library has been replaced by the more modern and portable <fstream> for file handling.
|
||||||
- Improvement in C++ usage: C++ libraries preferred over C libraries (e.g., <cctype> instead of <ctype.h>, <cmath> instead of <math.h>).
|
- Improvement in C++ usage: C++ libraries preferred over C libraries (e.g., <cctype> instead of <ctype.h>, <cmath> instead of <math.h>).
|
||||||
- Fixes required by Debian packaging.
|
- Fixes required by Debian packaging.
|
||||||
- Fixes required by Macports packaging.
|
- Fixes required by Macports packaging.
|
||||||
- A downside in portability: BLAS and LAPACK libraries are now required even in ARM devices.
|
- A downside in portability: BLAS and LAPACK libraries are now required even in ARM devices.
|
||||||
- A downside in portability: the matio library >= 1.5.3 is a new required dependency. If not found, it is downloaded and built automatically at building time, but this requires libtool, automake and hdf5 already installed in the system.
|
- A downside in portability: the matio library >= 1.5.3 is a new required dependency. If not found, it is downloaded and built automatically at building time, but this requires libtool, automake and hdf5 already installed in the system.
|
||||||
|
- A downside in portability: the PugiXML library is a new required dependency. If not found, it is downloaded and built automatically at building time.
|
||||||
|
|
||||||
|
|
||||||
### Improvements in Reliability:
|
### Improvements in Reliability:
|
||||||
@ -93,6 +103,7 @@ Next release will have several improvements in different dimensions, addition of
|
|||||||
- Improved flow graph stabiliy.
|
- Improved flow graph stabiliy.
|
||||||
- Introduction of high-integrity C++ practices into the source code and included in the coding style guide. See https://gnss-sdr.org/coding-style/
|
- Introduction of high-integrity C++ practices into the source code and included in the coding style guide. See https://gnss-sdr.org/coding-style/
|
||||||
- Fixed a number of defects detected by Coverity Scan.
|
- Fixed a number of defects detected by Coverity Scan.
|
||||||
|
- Improvement of QA code and addition of a number of new tests. Documented at https://gnss-sdr.org/docs/tutorials/testing-software-receiver-2/
|
||||||
- Improvement in C++ usage: rand() function replaced by <random> library.
|
- Improvement in C++ usage: rand() function replaced by <random> library.
|
||||||
- Improvement in C++ usage: strlen and strncpy have been replaced by safer C++ counterparts.
|
- Improvement in C++ usage: strlen and strncpy have been replaced by safer C++ counterparts.
|
||||||
- Improvement in C++ usage: Some destructors have been fixed, avoiding segmentation faults when exiting the program.
|
- Improvement in C++ usage: Some destructors have been fixed, avoiding segmentation faults when exiting the program.
|
||||||
@ -122,9 +133,10 @@ Next release will have several improvements in different dimensions, addition of
|
|||||||
|
|
||||||
- All Observables block implementations have been merged into a single implementation for all kinds of GNSS signals, making it easier to configure.
|
- All Observables block implementations have been merged into a single implementation for all kinds of GNSS signals, making it easier to configure.
|
||||||
- All PVT block implementations have been merged into a single implementation for all kinds of GNSS signals, making it easier to configure.
|
- All PVT block implementations have been merged into a single implementation for all kinds of GNSS signals, making it easier to configure.
|
||||||
- Misleading parameter name GNSS-SDR.internal_fs_hz has been replaced by GNSS-SDR.internal_fs_sps. The old parameter name is still read. If found, a warning is provided to the user.
|
- Misleading parameter name GNSS-SDR.internal_fs_hz has been replaced by GNSS-SDR.internal_fs_sps. The old parameter name is still read. If found, a warning is provided to the user. The old name will be removed in future releases.
|
||||||
- Updated and improved documentation of processing blocks at https://gnss-sdr.org/docs/sp-blocks/
|
- Updated and improved online documentation of processing blocks at https://gnss-sdr.org/docs/sp-blocks/
|
||||||
- Improved documentation of required dependency packages in several GNU/Linux distributions.
|
- Improved documentation of required dependency packages in several GNU/Linux distributions.
|
||||||
|
- Dump and output files can now be stored anywhere.
|
||||||
- Parameter names with the same role have been harmonized within different block implementations.
|
- Parameter names with the same role have been harmonized within different block implementations.
|
||||||
- Added a changelog, a code of conduct, a contributing guide and a pull-request template in the source tree.
|
- Added a changelog, a code of conduct, a contributing guide and a pull-request template in the source tree.
|
||||||
- Added colors to the commandline user interface.
|
- Added colors to the commandline user interface.
|
||||||
|
@ -32,3 +32,4 @@ Galileo
|
|||||||
|
|
||||||
Please check https://gnss-sdr.org/docs/sp-blocks/global-parameters/ for more information about the usage of XML files in GNSS-SDR.
|
Please check https://gnss-sdr.org/docs/sp-blocks/global-parameters/ for more information about the usage of XML files in GNSS-SDR.
|
||||||
|
|
||||||
|
You could find useful the utility program [rinex2assist](https://github.com/gnss-sdr/gnss-sdr/tree/next/src/utils/rinex2assist) for the generation of compatible XML files from recent, publicly available RINEX navigation data files.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
<<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||||
<xs:element name="boost_serialization">
|
<xs:element name="boost_serialization">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
@ -16,6 +16,7 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element type="xs:byte" name="i_satellite_PRN"/>
|
<xs:element type="xs:byte" name="i_satellite_PRN"/>
|
||||||
<xs:element type="xs:float" name="M0_1"/>
|
<xs:element type="xs:float" name="M0_1"/>
|
||||||
|
<xs:element type="xs:float" name="delta_n_3"/>
|
||||||
<xs:element type="xs:float" name="e_1"/>
|
<xs:element type="xs:float" name="e_1"/>
|
||||||
<xs:element type="xs:float" name="A_1"/>
|
<xs:element type="xs:float" name="A_1"/>
|
||||||
<xs:element type="xs:float" name="OMEGA_0_2"/>
|
<xs:element type="xs:float" name="OMEGA_0_2"/>
|
||||||
@ -34,6 +35,22 @@
|
|||||||
<xs:element type="xs:float" name="af0_4"/>
|
<xs:element type="xs:float" name="af0_4"/>
|
||||||
<xs:element type="xs:float" name="af1_4"/>
|
<xs:element type="xs:float" name="af1_4"/>
|
||||||
<xs:element type="xs:float" name="af2_4"/>
|
<xs:element type="xs:float" name="af2_4"/>
|
||||||
|
<xs:element type="xs:float" name="WN_5"/>
|
||||||
|
<xs:element type="xs:float" name="TOW_5"/>
|
||||||
|
<xs:element type="xs:float" name="Galileo_satClkDrift"/>
|
||||||
|
<xs:element type="xs:float" name="Galileo_dtr"/>
|
||||||
|
<xs:element type="xs:byte" name="flag_all_ephemeris"/>
|
||||||
|
<xs:element type="xs:byte" name="IOD_ephemeris"/>
|
||||||
|
<xs:element type="xs:byte" name="IOD_nav_1"/>
|
||||||
|
<xs:element type="xs:float" name="SISA_3"/>
|
||||||
|
<xs:element type="xs:byte" name="E5a_HS"/>
|
||||||
|
<xs:element type="xs:float" name="E5b_HS_5"/>
|
||||||
|
<xs:element type="xs:float" name="E1B_HS_5"/>
|
||||||
|
<xs:element type="xs:byte" name="E5a_DVS"/>
|
||||||
|
<xs:element type="xs:float" name="E5b_DVS_5"/>
|
||||||
|
<xs:element type="xs:float" name="E1B_DVS_5"/>
|
||||||
|
<xs:element type="xs:float" name="BGD_E1E5a_5"/>
|
||||||
|
<xs:element type="xs:float" name="BGD_E1E5b_5"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
<xs:attribute type="xs:byte" name="class_id" use="optional"/>
|
<xs:attribute type="xs:byte" name="class_id" use="optional"/>
|
||||||
<xs:attribute type="xs:byte" name="tracking_level" use="optional"/>
|
<xs:attribute type="xs:byte" name="tracking_level" use="optional"/>
|
||||||
|
@ -123,10 +123,7 @@ public:
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
archive& BOOST_SERIALIZATION_NVP(flag_all_ephemeris);
|
archive& BOOST_SERIALIZATION_NVP(i_satellite_PRN);
|
||||||
archive& BOOST_SERIALIZATION_NVP(IOD_ephemeris);
|
|
||||||
archive& BOOST_SERIALIZATION_NVP(IOD_nav_1);
|
|
||||||
archive& BOOST_SERIALIZATION_NVP(SV_ID_PRN_4);
|
|
||||||
|
|
||||||
archive& BOOST_SERIALIZATION_NVP(M0_1);
|
archive& BOOST_SERIALIZATION_NVP(M0_1);
|
||||||
archive& BOOST_SERIALIZATION_NVP(delta_n_3);
|
archive& BOOST_SERIALIZATION_NVP(delta_n_3);
|
||||||
@ -155,6 +152,10 @@ public:
|
|||||||
archive& BOOST_SERIALIZATION_NVP(Galileo_satClkDrift);
|
archive& BOOST_SERIALIZATION_NVP(Galileo_satClkDrift);
|
||||||
archive& BOOST_SERIALIZATION_NVP(Galileo_dtr);
|
archive& BOOST_SERIALIZATION_NVP(Galileo_dtr);
|
||||||
|
|
||||||
|
archive& BOOST_SERIALIZATION_NVP(flag_all_ephemeris);
|
||||||
|
archive& BOOST_SERIALIZATION_NVP(IOD_ephemeris);
|
||||||
|
archive& BOOST_SERIALIZATION_NVP(IOD_nav_1);
|
||||||
|
|
||||||
archive& BOOST_SERIALIZATION_NVP(SISA_3);
|
archive& BOOST_SERIALIZATION_NVP(SISA_3);
|
||||||
archive& BOOST_SERIALIZATION_NVP(E5a_HS);
|
archive& BOOST_SERIALIZATION_NVP(E5a_HS);
|
||||||
archive& BOOST_SERIALIZATION_NVP(E5b_HS_5);
|
archive& BOOST_SERIALIZATION_NVP(E5b_HS_5);
|
||||||
@ -165,8 +166,6 @@ public:
|
|||||||
|
|
||||||
archive& BOOST_SERIALIZATION_NVP(BGD_E1E5a_5);
|
archive& BOOST_SERIALIZATION_NVP(BGD_E1E5a_5);
|
||||||
archive& BOOST_SERIALIZATION_NVP(BGD_E1E5b_5);
|
archive& BOOST_SERIALIZATION_NVP(BGD_E1E5b_5);
|
||||||
|
|
||||||
archive& BOOST_SERIALIZATION_NVP(i_satellite_PRN);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,6 +28,18 @@ set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} ${GPSTK_INCLUDE_DIR}/gpstk)
|
|||||||
|
|
||||||
find_package(Boost COMPONENTS iostreams serialization QUIET)
|
find_package(Boost COMPONENTS iostreams serialization QUIET)
|
||||||
|
|
||||||
|
find_program(UNCOMPRESS_EXECUTABLE uncompress
|
||||||
|
PATHS /bin
|
||||||
|
/usr/bin
|
||||||
|
/usr/sbin
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT UNCOMPRESS_EXECUTABLE-NOTFOUND)
|
||||||
|
add_definitions(-DUNCOMPRESS_EXECUTABLE="${UNCOMPRESS_EXECUTABLE}")
|
||||||
|
else()
|
||||||
|
add_definitions(-DUNCOMPRESS_EXECUTABLE="")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(Boost_FOUND)
|
if(Boost_FOUND)
|
||||||
include_directories(
|
include_directories(
|
||||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||||
|
@ -1,7 +1,35 @@
|
|||||||
Rinex2assist
|
Rinex2assist
|
||||||
------------
|
------------
|
||||||
|
|
||||||
This program reads data from RINEX navigation files and generates XML files that can be read by GNSS-SDR as Assisted GNSS data. The usage is as follows:
|
This program reads data from RINEX navigation files and generates XML files that can be read by GNSS-SDR as Assisted GNSS data.
|
||||||
|
|
||||||
|
### Building
|
||||||
|
|
||||||
|
This program is built along with GNSS-SDR if the options `ENABLE_UNIT_TESTING_EXTRA` or `ENABLE_SYSTEM_TESTING_EXTRA` are set to `ON` when calling CMake:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON ..
|
||||||
|
$ make
|
||||||
|
$ sudo make intall
|
||||||
|
```
|
||||||
|
|
||||||
|
The last step is optional. Without it, you will get the executable at `../install/rinex2assist`.
|
||||||
|
|
||||||
|
The building requires two extra dependencies: the Boost Iostreams library and the program `uncompress`:
|
||||||
|
|
||||||
|
* The Boost Iostreams library can be installed through a package:
|
||||||
|
- In Debian / Ubuntu: `sudo apt-get install libboost-iostreams-dev`
|
||||||
|
- In Fedora / CentOS: `sudo yum install boost-iostreams`
|
||||||
|
- In OpenSUSE: `sudo zypper install libboost_iostreams-devel`
|
||||||
|
- In Arch Linux: included in `boost-libs` package.
|
||||||
|
- In MacOS: included in Macports / Homebrew `boost` package.
|
||||||
|
* The program `uncompress` is available by default in most UNIX and GNU/Linux systems.
|
||||||
|
- In Fedora / CentOS: `sudo yum install ncompress`
|
||||||
|
- In OpenSUSE: `sudo zypper install ncompress`
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
The usage is as follows:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ rinex2assist /path/to/RINEX_nav_file
|
$ rinex2assist /path/to/RINEX_nav_file
|
||||||
@ -9,11 +37,12 @@ $ rinex2assist /path/to/RINEX_nav_file
|
|||||||
|
|
||||||
The argument is mandatory (the name of the RINEX navigation file). The name `gps_ephemeris.xml` is given to the output if GPS NAV data is fould. If the RINEX file contains Galileo data, the corresponding `gal_ephemeris.xml` file will be generated. The program is also able to extract parameters of the UTC and the Ionospheric models from the RINEX header, if available. They will be called `gps_utc_model.xml`, `gps_iono.xml`, `gal_utc_model.xml` and `gal_iono.xml`.
|
The argument is mandatory (the name of the RINEX navigation file). The name `gps_ephemeris.xml` is given to the output if GPS NAV data is fould. If the RINEX file contains Galileo data, the corresponding `gal_ephemeris.xml` file will be generated. The program is also able to extract parameters of the UTC and the Ionospheric models from the RINEX header, if available. They will be called `gps_utc_model.xml`, `gps_iono.xml`, `gal_utc_model.xml` and `gal_iono.xml`.
|
||||||
|
|
||||||
There are some servers available for downloading RINEX navigation files. For instance:
|
There are some servers available for downloading recent RINEX navigation files. For instance:
|
||||||
* NASA: [ftp://cddis.gsfc.nasa.gov/pub/gnss/data/hourly/](ftp://gssc.esa.int/gnss/data/hourly/)
|
* NASA: [ftp://cddis.gsfc.nasa.gov/pub/gnss/data/hourly/](ftp://gssc.esa.int/gnss/data/hourly/)
|
||||||
* ESA: [ftp://gssc.esa.int/gnss/data/hourly/](ftp://gssc.esa.int/gnss/data/hourly/)
|
* ESA: [ftp://gssc.esa.int/gnss/data/hourly/](ftp://gssc.esa.int/gnss/data/hourly/)
|
||||||
|
* UNAVCO: [ftp://data-out.unavco.org/pub/hourly/rinex/](ftp://data-out.unavco.org/pub/hourly/rinex/)
|
||||||
|
|
||||||
Just make sure to pick up a [station near you](http://www.igs.org/network).
|
Just make sure to pick up a recent file from a [station near you](http://www.igs.org/network).
|
||||||
|
|
||||||
The program accepts either versions 2.xx or 3.xx for the RINEX navigation data file, as well as compressed files (ending in `.gz` or `.Z`).
|
The program accepts either versions 2.xx or 3.xx for the RINEX navigation data file, as well as compressed files (ending in `.gz` or `.Z`).
|
||||||
|
|
||||||
|
@ -76,6 +76,7 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
// Uncompress if RINEX file is gzipped
|
// Uncompress if RINEX file is gzipped
|
||||||
std::string rinex_filename(argv[1]);
|
std::string rinex_filename(argv[1]);
|
||||||
|
std::string input_filename = rinex_filename;
|
||||||
std::size_t found = rinex_filename.find_last_of(".");
|
std::size_t found = rinex_filename.find_last_of(".");
|
||||||
if (found != std::string::npos)
|
if (found != std::string::npos)
|
||||||
{
|
{
|
||||||
@ -99,9 +100,14 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
in.push(file);
|
in.push(file);
|
||||||
std::string rinex_filename_unzipped = rinex_filename.substr(0, found);
|
std::string rinex_filename_unzipped = rinex_filename.substr(0, found);
|
||||||
std::ofstream output_file(rinex_filename_unzipped.c_str(), std::ios_base::out | std::ios_base::binary);
|
std::ofstream output_file(rinex_filename_unzipped.c_str(), std::ios_base::out | std::ios_base::binary | std::ios_base::trunc);
|
||||||
|
if (file.fail())
|
||||||
|
{
|
||||||
|
std::cerr << "Could not create file " << rinex_filename_unzipped << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
boost::iostreams::copy(in, output_file);
|
boost::iostreams::copy(in, output_file);
|
||||||
rinex_filename = rinex_filename_unzipped;
|
input_filename = rinex_filename_unzipped;
|
||||||
}
|
}
|
||||||
if ((rinex_filename.substr(found + 1, found + 2).compare("Z") == 0))
|
if ((rinex_filename.substr(found + 1, found + 2).compare("Z") == 0))
|
||||||
{
|
{
|
||||||
@ -112,14 +118,28 @@ int main(int argc, char** argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
file.close();
|
file.close();
|
||||||
|
std::string uncompress_executable(UNCOMPRESS_EXECUTABLE);
|
||||||
|
if (!uncompress_executable.empty())
|
||||||
|
{
|
||||||
// option k is not always available, so we save a copy of the original file
|
// option k is not always available, so we save a copy of the original file
|
||||||
std::string argum = std::string("/bin/cp " + rinex_filename + " " + rinex_filename + ".aux");
|
std::string argum = std::string("/bin/cp " + rinex_filename + " " + rinex_filename + ".aux");
|
||||||
std::system(argum.c_str());
|
int s1 = std::system(argum.c_str());
|
||||||
std::string argum2 = std::string("/usr/bin/uncompress -f " + rinex_filename);
|
std::string argum2 = std::string(uncompress_executable + " -f " + rinex_filename);
|
||||||
std::system(argum2.c_str());
|
int s2 = std::system(argum2.c_str());
|
||||||
std::string argum3 = std::string("/bin/mv " + rinex_filename + +".aux" + " " + rinex_filename);
|
std::string argum3 = std::string("/bin/mv " + rinex_filename + +".aux" + " " + rinex_filename);
|
||||||
std::system(argum3.c_str());
|
int s3 = std::system(argum3.c_str());
|
||||||
rinex_filename = rinex_filename.substr(0, found);
|
input_filename = rinex_filename.substr(0, found);
|
||||||
|
if ((s1 != 0) or (s2 != 0) or (s3 != 0))
|
||||||
|
{
|
||||||
|
std::cerr << "Failure uncompressing file." << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "uncompress program not found." << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +156,7 @@ int main(int argc, char** argv)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Read nav file
|
// Read nav file
|
||||||
gpstk::Rinex3NavStream rnffs(rinex_filename.c_str()); // Open navigation data file
|
gpstk::Rinex3NavStream rnffs(input_filename.c_str()); // Open navigation data file
|
||||||
gpstk::Rinex3NavData rne;
|
gpstk::Rinex3NavData rne;
|
||||||
gpstk::Rinex3NavHeader hdr;
|
gpstk::Rinex3NavHeader hdr;
|
||||||
|
|
||||||
@ -271,6 +291,7 @@ int main(int argc, char** argv)
|
|||||||
eph.af0_4 = rne.af0;
|
eph.af0_4 = rne.af0;
|
||||||
eph.af1_4 = rne.af1;
|
eph.af1_4 = rne.af1;
|
||||||
eph.af2_4 = rne.af2;
|
eph.af2_4 = rne.af2;
|
||||||
|
eph.WN_5 = rne.weeknum;
|
||||||
eph_gal_map[j] = eph;
|
eph_gal_map[j] = eph;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user