GNSS observation data files in the ROB data repositories are stored by GNSS station/day in the Hatanaka-compressed Receiver INdependent EXchange (RINEX).
The RINEX format is the standard format to exchange GNSS observation data files generated by different types of GNSS receivers independently of the receiver manufacturer. To reduce the file size of the RINEX data files to a minimum, the RINEX data files are downloadable in the Hatanaka-compressed format, which is a two-step compression format with one of the steps being the common compression gzip or compress (for older files). Once downloaded, Hatanaka-compressed RINEX files can be decompressed using the RNXCMP software, which performs both decompression steps and outputs the GNSS data file in the RINEX format.
Example of the Hatanaka-compressed RINEX file naming convention for the daily GNSS data of the station GENO00ITA for Day Of Year (DOY) 020 of the year 2020:When selecting the JSON-LD serialization format (see the Output file formats section), the GNSS observation data retrievable from this Open Data Portal are supplemented with rich and structured extra information (metadata) as recommended by the FAIR data principles. This rich metadata can include information on: data documentation, data license, data provenance (information on the origin of the data, how they were collected and eventually manipulated), data quality, etc. At present, the portal is providing limited provenance metadata nor data quality metadata, but this will be included in a future version.
To enable interoperability, the content of these metadata is expressed using controlled vocabularies e.g., the list of standard names for GNSS receivers and antennas adopted by International GNSS Service (IGS). To structure and standardize the metadata, the portal uses the GNSS-DCAT-AP schema, which includes all the mandatory DCAT-AP elements as well as metadata attributes specific to GNSS stations and RINEX data files. The GNSS-DCAT-AP schema takes into account best practices in other GNSS data repositories, compliance with FAIR principles, and the perspective of the users accessing and using the data, as well as those managing and preserving the data in the repositories.
The GNSS-DCAT-AP schema describes in a standardized and structured way the daily RINEX files, the GNSS stations' datasets and the GNSS repositories. The table below lists just a few GNSS-DCAT-AP elements by way of example:
Daily RINEX file metadata | |
---|---|
Description | GNSS-DCAT-AP |
Daily RINEX file | Distribution |
RINEX file name | title |
Link to the corresponding station | dataset |
Station dataset metadata | |
---|---|
Description | GNSS-DCAT-AP |
GNSS station dataset | Dataset |
Station dataset's name | title |
Links to the station's RINEX data files | distribution |
Repository metadata | |
---|---|
Description | GNSS-DCAT-AP |
GNSS repository | Catalog |
GNSS repository's name | title |
Links to the stations included in the repository | dataset |
The GNSS-DCAT-AP schema includes both RINEX-dependent as well as station-dependent metadata.
The RINEX-dependent metadata provided by this portal (in the GNSS-DCAT-AP schema) includes, for example, the date of the last change for each of the RINEX files included in the search, the URLs to download the RINEX files, information on the compression format, data license information, etc. The RINEX-dependent metadata is downloadable in the JSON-LD format.
Let's consider the metadata of the daily RINEX data of the station BRUX00BEL for Day Of Year (DOY) 363 of the year 2009:
{ "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_R2", "@type": "Distribution", "accessURL": { "@type": "xsd:anyURI", "@value": "https://epncb.oma.be/pub/RINEX/2009/363/BRUX3630.09D.Z" }, "adms:status": { "@id": "https://publications.europa.eu/resource/authority/distribution-status/COMPLETED" }, "compressFormat": "application/x-gzip", "dataset": { "@id": "https://epncb.oma.be/PID/BRUX00BEL" }, "dct:checksum": { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#checksum" }, "dct:conformsTo": { "@id": "https://gnss.be/PID/standard#hatanaka" }, "dct:description": "Daily RINEX data of the GNSS station BRUX00BEL for DOY 363 of 2009", "dct:issued": { "@type": "xsd:dateTime", "@value": "2009-12-29T00:00:00" }, "dct:license": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#license" }, "dct:modified": { "@type": "xsd:dateTime", "@value": "2020-02-05T16:42:12" }, "dct:title": "BRUX3630.09D.Z", "downloadURL": { "@type": "xsd:anyURI", "@value": "https://epncb.oma.be/pub/RINEX/2009/363/BRUX3630.09D.Z" }, "gnss:obsData": { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#obsdata" }, "mediaType": "application/octet-stream", "temporal": { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#temporal" } }, { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#obsdata", "@type": "gnss:OBSData", "gnss:compressFormat": { "@id": "https://gnss.be/PID/standard/hatanaka" }, "gnss:format": { "@id": "https://gnss.be/PID/standard/RINEX" }, "gnss:frequency": { "@id": "http://purl.org/cld/freq/daily" }, "gnss:obsHeader": { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#obsheader" }, "gnss:station": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#station" } }, { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#obsheader", "gnss:antenna": { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#antenna" }, "gnss:interval": { "@type": "xsd:nonNegativeInteger", "@value": "30" }, "gnss:issued": { "@type": "xsd:dateTime", "@value": "2009-12-29T00:00:00" }, "gnss:markerName": "BRUX00BEL", "gnss:receiver": { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#receiver" }, "gnss:rinexVersion": "2", "gnss:temporal": { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#temporal" } }, { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#temporal", "@type": "PeriodOfTime", "endDate": { "@type": "xsd:dateTime", "@value": "2009-12-29T23:59:30" }, "startDate": { "@type": "xsd:dateTime", "@value": "2009-12-29T00:00:00" } }, { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#checksum", "@type": "dct:Checksum", "dct:checksumAlgorithm": "MD5", "dct:checksumValue": "71bcfa51f561a7cf984ad2f4458b56e9" }, { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#receiver", "gnss:firmware_version": "1L01-1D04", "gnss:igsModelCode": "ASHTECH Z-XII3T" }, { "@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_RNone#antenna", "gnss:igsModelCode": "ASH701945C_M NONE", "gnss:marker-arpEastEcc": { "@type": "xsd:float", "@value": "0.0" }, "gnss:marker-arpNorthEcc": { "@type": "xsd:float", "@value": "0.001" }, "gnss:marker-arpUpEcc": { "@type": "xsd:float", "@value": "0.1266" } }where the date of the last change is reported as "dct:modified": "2020-02-05T16:42:12Z", together with other relevant information related to the RINEX file itself, e.g. data license under "dct:license", data description and format under "dct:description, "dct:conformsTo", link to the station-dependent metadata via "dataset" etc.
The station-dependent metadata (in the GNSS-DCAT-AP schema) is provided in the form of persistent links (URL) to the station site log and GeodesyML files as well as a few properties related to the station dataset (e.g data license and links to the RINEX files and the repository metadata). The site log is an international standard for exchanging station descriptions. More detailed station information is available from the GeodesyML file (version 0.5), which contains all the information stored in the site log plus some extra metadata elements such as data license, and a DOI for the GNSS station dataset. These extra metadata are part of the additional information needed to comply with FAIR data principles.
For example, the JSON-LD file (extract of the GNSS-DCAT-AP schema) associated to the RINEX data of the BRUX00BEL station would contain:{ "@id": "https://epncb.oma.be/PID/BRUX00BEL#sitelog", "@type": "Distribution", "accessURL": { "@type": "xsd:anyURI", "@value": "https://gnss-metadata.eu" }, "dct:description": "Station site log for BRUX00BEL", "dct:issued": { "@type": "xsd:dateTime", "@value": "2023-06-06T02:18:00+00:00" }, "dct:license": { "@id": "https://creativecommons.org/licenses/by/4.0/" }, "dct:modified": { "@type": "xsd:dateTime", "@value": "2023-06-06T02:18:00+00:00" }, "dct:title": "brux00bel_20230124.log", "downloadURL": { "@type": "xsd:anyURI", "@value": "https://gnss-metadata.eu/v1/sitelog/exportlog?id=BRUX00BEL" }, "mediaType": "text/plain;charset=UTF-8" }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#geodesyml", "@type": "Distribution", "accessURL": { "@type": "xsd:anyURI", "@value": "https://gnss-metadata.eu" }, "dct:description": "Station GeodesyML for BRUX00BEL", "dct:issued": { "@type": "xsd:dateTime", "@value": "2023-06-06T02:18:00+00:00" }, "dct:license": { "@id": "https://creativecommons.org/licenses/by/4.0/" }, "dct:modified": { "@type": "xsd:dateTime", "@value": "2023-06-06T02:18:00+00:00" }, "dct:title": "BRUX00BEL.xml", "downloadURL": { "@type": "xsd:anyURI", "@value": "https://gnss-metadata.eu/v1/sitelog/exportxml?id=BRUX00BEL" }, "mediaType": "application/xml;charset=UTF-8" }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL", "@type": "Dataset", "adms:identifier": [ { "@id": "https://epncb.oma.be/PID/BRUX00BEL#identifier_ninechar" }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#identifier_domes" } ], "catalog": { "@id": "https://epncb.oma.be/PID/catalog" }, "contactPoint": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#contact" }, "dct:accrualPeriodicity": { "@id": "http://purl.org/cld/freq/daily" }, "dct:creator": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#creator" }, "dct:description": { "@language": "en", "@value": "BRUX00BEL GNSS station daily RINEX data at EUREF Permanent GNSS Network Historical Data Center" }, "dct:modified": { "@type": "xsd:dateTime", "@value": "2024-03-13T04:04:37" }, "dct:spatial": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#spatial" }, "dct:temporal": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#temporal" }, "dct:title": { "@language": "en", "@value": "BRUX00BEL Dataset" }, "distribution": [ { "@id": "https://epncb.oma.be/PID/2009/001/BRUX00BEL_2009001_01D_30S_R2" }, ... { "@id": "https://epncb.oma.be/PID/2024/066/BRUX00BEL_2024066_01D_30S_R3" } ], "gnss:station": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#station" }, "keyword": [ "GNSS Dataset", "30 s", "24 h", "EPN Historical Data Center", "BRUX00BEL", "Brussels", "BEL" ] }, { "@id": "https://creativecommons.org/licenses/by/4.0/", "@type": "dct:LicenseDocument", "dct:identifier": "CC-BY-4.0", "dct:license": { "@type": "xsd:anyURI", "@value": "https://creativecommons.org/licenses/by/4.0/" }, "dct:title": "CC-BY-4.0" }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#identifier_domes", "@type": "adms:Identifier", "adms:schemaAgency": { "@language": "en", "@value": "Station DOMES number" }, "skos:notation": "13101M010" }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#location", "@type": "dct:Point", "locn:coordinates": "[4.358563471289608, 50.79806281977222]" }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#temporal", "@type": "dct:PeriodOfTime", "endDate": { "@type": "xsd:dateTime", "@value": "2024-03-06T23:59:30" }, "startDate": { "@type": "xsd:dateTime", "@value": "2009-01-01T00:00:00" } }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#license", "@type": "dct:LicenseDocument", "dct:identifier": "CC-BY-4.0", "dct:license": { "@type": "xsd:anyURI", "@value": "https://creativecommons.org/licenses/by/4.0/" }, "dct:title": "CC-BY-4.0" }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#spatial", "@type": "dct:Location", "locn:city": "Brussels", "locn:country": "BEL", "locn:geometry": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#location" } }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#creator", "@type": "foaf:agent", "foaf:name": { "@language": "en", "@value": "Royal Observatory of Belgium (BEL)" } }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#identifier_ninechar", "@type": "adms:Identifier", "adms:schemaAgency": { "@language": "en", "@value": "Station 9 Character Identifier" }, "skos:notation": "BRUX00BEL" }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#contact", "@type": "vcard:Contact", "vcard:email": "gnss@oma.be", "vcard:fn": "GNSSatROB" }, { "@id": "https://epncb.oma.be/PID/BRUX00BEL#station", "@type": "gnss:Station", "gnss:geodesyml": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#geodesyml" }, "gnss:nineCharacterID": "BRUX00BEL", "gnss:sitelog": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#sitelog" } }where https://gnss-metadata.eu/v1/sitelog/exportlog?id=BRUX00BEL and https://gnss-metadata.eu/v1/sitelog/exportxml?id=BRUX00BEL are the URLs to download the station site log and the GeodesyML file, respectively.
Finally, to retrieve these metadata from the portal and eventually process them, have a look at the Retrieve GNSS data & metadata files and the Process GNSS data & metadata files sections.
When downloading GNSS (meta)data from this portal, you are expected to acknowledge (cite) the GNSS (meta)data providers. For this purpose, Digital Object Identifiers (DOIs) are assigned to the GNSS metadata and RINEX data. DOIs provide a globally unique, persistent and resolvable reference to the (meta)data and offer users the necessary information to cite the data. In addition, through DOIs, users are aware of data access restrictions and cross-linking through various DOIs becomes possible (e.g. link publications and underlying data, datasets with other datasets via hierarchical relations, visualize relationships via PID graphs).
To cite the usage of GNSS station-dependent metadata, use the citation available through the following DOI: https://doi.org/10.24414/ROB-GNSS-M3G.
To cite the usage of GNSS RINEX data files, several options are possible:
{ "@id": "https://epncb.oma.be/PID/DVCN00SVK#identifier_doi", "@type": "adms:Identifier", "adms:schemaAgency": { "@language": "en", "@value": "International DOI Foundation" }, "skos:notation": { "@type": "xsd:anyURI", "@value": "https://doi.org/10.24414/ROB-EUREF-DVCN00SVK" } },
Presently, ROB is still in the process of collecting and/or minting DOI for all the RINEX datasets in its repositories. As long as this process is not completed, 1. is the recommended data citation method.
The conditions under which the data provided by this Open Data Portal can be accessed, used and shared have been decided by the agencies responsible for the GNSS stations through the provision of a data license. This data license is a legal arrangement between the owner of the data and the end-users.
All GNSS data available from this data portal come with a Creative Commons (CC) license and the most common licenses are:
"dct:license": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#license" },where the data license is identified with a Persistent Identifier (PID) linking the RINEX file to https://epncb.oma.be/PID/BRUX00BEL#license i.e. the metadata describing the BRUX00BEL station datasets. Indeed, via the request https://gnss.be/api/v1/epn/dataset/BRUX00BEL, one gets the following detailed data license information:
{ "@id": "https://epncb.oma.be/PID/BRUX00BEL#license", "@type": "dct:LicenseDocument", "dct:identifier": "CC-BY-4.0", "dct:license": { "@type": "xsd:anyURI", "@value": "https://gnss-metadata.eu/v1/licensedescription/view?id=CC-BY-4.0" }, "dct:title": "CC-BY-4.0" }, { "@id": "https://creativecommons.org/licenses/by/4.0/", "@type": "dct:LicenseDocument", "dct:identifier": "CC-BY-4.0", "dct:license": { "@type": "xsd:anyURI", "@value": "https://creativecommons.org/licenses/by/4.0/" }, "dct:title": "CC-BY-4.0" },where the data license is identified by the PID mentioned above (https://epncb.oma.be/PID/BRUX00BEL#license) and documented by "dct:identifier": "CC-BY-4.0" and "dct:license": "https://creativecommons.org/licenses/by/4.0/"
The GNSS data and associated metadata can be retrieved by the search functionalities of the web interface of the Open Data Portal or via its RESTful HTTP application programming interface (API).
In both cases, the selected output format will define the amount of information that is provided to the user as summarized in the table below:Output format |
URLs of the RINEX data files |
Metadata (RINEX file, station datasets and repository) |
|
---|---|---|---|
txt | ✓ | - | |
JSON | ✓ | - | |
JSON-LD | ✓ | ✓ |
The format of the data provided by the Open Data Portal is described here. The format of the provided metadata is described here.
Through the web interface of the Open data Portal you can select RINEX data available in the EPN HDC and the Belgian GNSS data repository. At present, the web interface allows you to select daily RINEX data based on:
In the search results table, below the map showing the GNSS stations corresponding to the selected RINEX data, you can then download different types of output files (detailed in the Output formats section)
containing the URLs to the daily RINEX data you selected (see Example I.1 and I.2) as well as files containing also the metadata associated to the selected RINEX data (see Example I.3).
In the search results table, one can download a plain text output file containing the URLs pointing to the selected RINEX files i.e., as in the example above, the daily RINEX files of the BRUX00BEL station dating from 2009-12-29 to 2010-01-02. You can then click on and download the BRUX00BEL.txt file, which contains:
https://epncb.oma.be/pub/RINEX/2009/363/BRUX3630.09D.Z https://epncb.oma.be/pub/RINEX/2009/364/BRUX3640.09D.Z https://epncb.oma.be/pub/RINEX/2009/365/BRUX3650.09D.Z https://epncb.oma.be/pub/RINEX/2010/001/BRUX0010.10D.Z https://epncb.oma.be/pub/RINEX/2010/002/BRUX0020.10D.Z
A simple example on how to process this type of file and actually download the RINEX files is given in Example P.1.
A in the example above, in addition to the plain text file, one could download a JSON output file, by clicking on in the search results table. This JSON file contains the URLs pointing to the selected RINEX files together with some additional information such a the date, the Day Of the Year (DOY), the year and the RINEX version corresponding to each of the selected RINEX FILES:
[ { "DOY": 363, "date": "2009-12-29", "filename": "BRUX3630.09D.Z", "rinexVersion": "2", "stationId": "BRUX00BEL", "url": "https://www.epncb.oma.be/pub/RINEX/2009/363/BRUX3630.09D.Z", "year": 2009 }, { "DOY": 364, "date": "2009-12-30", "filename": "BRUX3640.09D.Z", "rinexVersion": "2", "stationId": "BRUX00BEL", "url": "https://www.epncb.oma.be/pub/RINEX/2009/364/BRUX3640.09D.Z", "year": 2009 }, ... ]
To know more on how to process this output and download the files, see the Example P.2.
On the web interface, one might want to retrieve the URLs pointing to the selected RINEX data and the accompanying metadata. To do so, click on and download a JSON-LD output file (BRUX00BEL.jsonld). The BRUX00BEL.jsonld file is structured according to the GNSS-DCAT-AP schema (see the GNSS metadata format section) and contains the URLs to download the selected RINEX files (accessURL), and metadata such as the file name (dct:title), last modfication date (dct:modified), etc. for each of the selected RINEX files:
"@id": "https://epncb.oma.be/PID/2009/363/BRUX00BEL_2009363_01D_30S_R2", "@type": "Distribution", "accessURL": { "@type": "xsd:anyURI", "@value": "https://epncb.oma.be/pub/RINEX/2009/363/BRUX3630.09D.Z" }, "dct:title": "BRUX3630.09D.Z", "downloadURL": { "@type": "xsd:anyURI", "@value": "https://epncb.oma.be/pub/RINEX/2009/363/BRUX3630.09D.Z" }, "dct:description": "Daily RINEX data of the GNSS station BRUX00BEL for DOY 363 of 2009", "dct:issued": { "@type": "xsd:dateTime", "@value": "2009-12-29T00:00:00" }, "dct:modified": { "@type": "xsd:dateTime", "@value": "2020-02-05T16:42:12" }, "dct:conformsTo": { "@id": "https://gnss.be/PID/standard#hatanaka" }, "dct:license": { "@id": "https://epncb.oma.be/PID/BRUX00BEL#license" }, ...
To know more on how to process this output, see the Examples P.3 & P.4.
Depending on which repository you would like to to access i.e., the EPN HDC or the Belgian GNSS data repository, there is a corresponding API server to retrieve GNSS metadata and daily RINEX data, and a Swagger User Interface to check the API documentation and test the API itself:
API server | Swagger User Interface | |
---|---|---|
EPN HDC repository | https://gnss.be/api/v1/epn/ | https://gnss.be/api/v1/epn/doc |
Belgian GNSS data repository | https://gnss.be/api/v1/belgium/ | https://gnss.be/api/v1/belgium/doc |
API endpoint | Optional parameters | Output formats | Pagination | Short description |
---|---|---|---|---|
GET /station-data/{stationId} | RINEX version, start date, end date, last modification date | text, JSON, JSON-LD | NO | Retrieve RINEX data URLs in a given time range and associated metadata of one GNSS station | GET /data | (list of) 9-char station IDs, RINEX version, start date, end date, last modification date | text, JSON, JSON-LD | YES | Retrieve RINEX data URLs in a given time range and associated metadata of one or more GNSS stations | GET /distribution/{stationid}/{YEAR}/{DOY}/{rinex_version} | RINEX version, start date, end date, last modification date | text, JSON, JSON-LD | NO | Retrieve URL for a single RINEX data file of a given YEAR/DOY/RINEX version and associated metadata for one GNSS station | GET /doy/{YEAR}/{DOY} | RINEX version, start date, end date, last modification date | text, JSON, JSON-LD | NO | Retrieve RINEX data URLs and associated metadata of one or more GNSS stations for a given YEAR/DOY | GET /dataset/{stationId} | - | JSON-LD | NO | Retrieve the station metadata (DOI, data license, station location, etc. and an overview of the available RINEX data) | GET /catalog | - | JSON-LD | NO | Retrieve the repository metadata (publisher, location, list of GNSS stations, etc.) based on the choice of the API server |
Let's assume one would like to retrieve all the available RINEX data of the BRUX00BEL station from 2009-12-29 to 2010-01-02 and, as in the Example I.1, you would like to obtain the list of URLs pointing to the RINEX data in a plain text output file.
The API endpoint /station-data/{stationid} allows you to do that. You need to formulate your query/request by specifying the station 9-characters ID, the start and end date, and the RINEX version you are interested in. Please note that the RINEX version default value is the most recent version available (as provided by the GNSS station managers) in the given date range.
The API URL corresponding to your query would look like:
https://gnss.be/api/v1/belgium/station-data/BRUX00BEL?rinexVersion=all&startDate=2023-09-01&endDate=2023-09-01By clicking on the link above, you will visualize the API response in JSON, which is the current default output format.
To actually obtain as a response a plain text output file with the list of URLs, you need to use content negotiation and include in the Accept header parameter the desired type of output (text/plain). One of the easiest ways to download the text file is via the curl command, which acts as an HTTP client and allows you to send requests and display/store the corresponding response:
As in Example I.1, the BRUX00BEL_file_list.txt will contain the list of URLs as a column.
To know more on how to process this output and download the files, see the Example P.1.
As mentioned in the example above (A.1), once the query parameters have been identified (station 9-characters ID, dates, RINEX version, etc.), the API URL:
https://gnss.be/api/v1/belgium/station-data/BRUX00BEL?rinexVersion=all&startDate=2023-09-01&endDate=2023-09-01returns a JSON output file by default. You can then download the JSON file from your browser or using content negotiation, for example via curl
To know more on how to process this output and download the files, see the Example P.2.
As mentioned in the examples above (A.1 and A.2), once the query parameters have been identified (station 9-characters ID, dates, RINEX version..), the API URL is defined
https://gnss.be/api/v1/belgium/station-data/BRUX00BEL?rinexVersion=all&startDate=2023-09-01&endDate=2023-09-01By choosing JSON-LD output format i.e. application/ld+json as accept header parameter, you can download the metadata associated to the selectd RINEX files, together with URLs pointing to those files (see also Example I.3).
In practice, via content negotiation, you can download the JSON-LD file. For example, via curl:
The API also allows the users to retrieve rich metadata asoociated to the GNSS stations and the data repositories in JSON-LD output format. For example, using the https://gnss.be/api/v1/belgium/ API server:
To know more on how to process this output and download the files, see the Examples P.3 & P.4.
Please note that, in addition to the Open Data Portal web interface and API, one could also access the data via HTTPS file servers (for the EPN HDC and the Belgian repository) as well as the metadata via metadata file servers (for both the EPN HDC and Belgian repository).
If you have selected to download the list of URLs pointing to the RINEX data as text output file whether via the web interface as in Example I.1 or via the API as in Example A.1, you can now actually download the selected RINEX files using the URL list in the text file.
For example, assuming BRUX00BEL_file_list.txt is the text file containing teh URLs, you can download the RINEX file svia the command line tool wget. You can choose to keep the file server directory structure via wget -x -nH or download all files in the same directory. For example:
$ wget -i BRUX00BEL_file_list.txt $ tree . ├── BRUX0010.10D.Z ├── BRUX0020.10D.Z ├── BRUX00BEL_file_list.txt ├── BRUX3630.09D.Z ├── BRUX3640.09D.Z └── BRUX3650.09D.Z 0 directories, 6 files
$ wget -x -nH -i BRUX00BEL_file_list.txt $ tree . ├── BRUX00BEL_file_list.txt └── pub └── RINEX ├── 2009 │ ├── 363 │ │ └── BRUX3630.09D.Z │ ├── 364 │ │ └── BRUX3640.09D.Z │ └── 365 │ └── BRUX3650.09D.Z └── 2010 ├── 001 │ └── BRUX0010.10D.Z └── 002 └── BRUX0020.10D.Z 9 directories, 6 files
If you have selected to download the list of URLs pointing to the RINEX data as JSON output file whether via the web interface as in Example I.2 or via the API as in Example A.2, you can now actually download the selected RINEX files using the URL list in the JSOn file using various approaches.
For example, a PHP script with the cURL functions :
Using Python, with the requests, a generic HTTP client library (installable via pip install requests):
Using Python, with the request library and rdflib, which can read JSON-LD formatted documents and create RDF graphs (both installable via pip install requests rdflib):
import requests
import rdflib
api_url="https://gnss.be/api/v1/belgium/station-data/BRUX00BEL?rinexVersion=all&startDate=2009-12-29&endDate=2010-01-02"
headers={'accept': 'application/ld+json'}
jsonldfile=requests.get(api_url,headers=headers).json()
g = rdflib.Graph()
g.parse(data=jsonldfile,format='json-ld')
#Prepare the SPARQL query to get from the graph g all ``dcat:accessURL`` instances aka the URLs pointing to the files
q = """
PREFIX dcat1: <https://www.w3.org/ns/dcat#>
SELECT ?url
WHERE {
?p dcat1:accessURL ?url .
}
"""
#Apply the query to the graph and iterate to get all RINEX files URLs and download them
for r in g.query(q):
url=r["url"]
filename=url.rsplit('/', 1)[1]
print(filename)
r = requests.get(url, allow_redirects=True)
open(filename, 'wb').write(r.content)
To be completed with additional examples and use cases.