{"id":24456149,"url":"https://github.com/arthurdjn/gnsstools","last_synced_at":"2025-10-01T17:31:11.348Z","repository":{"id":58718332,"uuid":"332574359","full_name":"arthurdjn/gnsstools","owner":"arthurdjn","description":"Python tools to read and process RINEX, SP3 etc. files, for GNSS management and orbit corrections.","archived":false,"fork":false,"pushed_at":"2021-01-31T19:09:17.000Z","size":1637,"stargazers_count":12,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2023-03-10T01:42:17.889Z","etag":null,"topics":["galileo","glonass","gnss","gps","orbit","rinex","rinex2","rinex3","sp3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arthurdjn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-01-24T22:54:00.000Z","updated_at":"2023-01-11T00:29:19.000Z","dependencies_parsed_at":"2022-09-06T20:50:33.060Z","dependency_job_id":null,"html_url":"https://github.com/arthurdjn/gnsstools","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdjn%2Fgnsstools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdjn%2Fgnsstools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdjn%2Fgnsstools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdjn%2Fgnsstools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arthurdjn","download_url":"https://codeload.github.com/arthurdjn/gnsstools/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234883245,"owners_count":18901366,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["galileo","glonass","gnss","gps","orbit","rinex","rinex2","rinex3","sp3"],"created_at":"2025-01-21T02:15:28.709Z","updated_at":"2025-10-01T17:31:05.930Z","avatar_url":"https://github.com/arthurdjn.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"\" rel=\"noopener\"\u003e\n \u003cimg width=400px src=\"media/logo.png\" alt=\"Project logo\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Status](https://img.shields.io/badge/status-active-success.svg)]()\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE)\n\n\u003c/div\u003e\n\n---\n\n\u003cp align=\"center\"\u003e Process \u003ccode\u003eRINEX\u003c/code\u003e, \u003ccode\u003eSP3\u003c/code\u003e and other GNSS files for orbit computation and geo-localization. Retrieve precise satellites and receptors position in a few lines of code.\n    \u003cbr\u003e \n\u003c/p\u003e\n\n## Table of Contents\n\n- [About](#about)\n- [Documentation](#documentation)\n- [Getting Started](#getting_started)\n- [GNSS Time](#gnsstime)\n- [Rinex](#rinex)\n- [Satellites](#satellites)\n- [Contributing](../CONTRIBUTING.md)\n- [Authors](#authors)\n- [Acknowledgments](#acknowledgement)\n\n## About \u003ca name = \"about\"\u003e\u003c/a\u003e\n\n### Overview\n\nThis project will help you in your GNSS workflow. It provides tools for manipulating / converting GNSS dates (from datetime to Julian Day), readers for ``RINEX`` and ``SP3`` for version 2 and 3. \nLast but not least, ``gnsstools`` lets you correct GNSS orbits from raw files, and compute receptors' position.\n\n### Status\n\n| Development                  | Status      | Feature                                                                |\n| ---------------------------- | ----------- | ---------------------------------------------------------------------- |\n| GNSS Time                    | finished    | \u003cul\u003e\u003cli\u003e[x] DateTime\u003c/li\u003e\u003cli\u003e[x] GPS Time\u003c/li\u003e\u003cli\u003e[x] Julian Day\u003c/li\u003e\u003cli\u003e[x] Modified Julian Day\u003c/li\u003e\u003c/ul\u003e |\n| Rinex                        | in progress | \u003cul\u003e\u003cli\u003e[x] Rinex Observation\u003c/li\u003e\u003cli\u003e[x] Rinex Navigation\u003c/li\u003e\u003cli\u003e[x] SP3\u003c/li\u003e\u003cli\u003e[ ] Rinex Compact\u003c/li\u003e\u003c/ul\u003e |\n| Satellites                   | in progress | \u003cul\u003e\u003cli\u003e[ ] Position\u003c/li\u003e\u003cli\u003e[ ] Clock Offset\u003c/li\u003e\u003cli\u003e[ ] Pseudo Distance\u003c/li\u003e\u003c/ul\u003e |\n\n## Documentation \u003ca name = \"documentation\"\u003e\u003c/a\u003e\n\n### Read The Docs\n\nThe documentation is available online on [readthedocs](https://gnsstools.readthedocs.io/en/latest/). You will find the code documentation of the whole package, examples and tutorials. Make sure you have read the documentation before opening an issue.\n\n### Tutorials\n\nIn addition of the examples and tutorials available on [readthedocs](https://gnsstools.readthedocs.io/en/latest/),\nthere is a list of [jupyter notebooks](notebooks). Each one focuses on a specific topic: [reading files](notebooks/),\n[retrieving orbits](notebooks/), [computing receptor's position](notebooks) etc.\n\n## Getting Started \u003ca name = \"getting_started\"\u003e\u003c/a\u003e\n\nThese instructions will show you the steps on how to install and use ``gnsstools`` straight from the box.\n\n### Installing\n\nThe package is available from [PyPi](https://pypi.org/project/gnsstools/). To install it, use:\n\n```\npip install gnsstools\n```\n\nAlternatively, you can install the latest version from this repository. [Download](https://github.com/arthurdjn/gnsstools/archive/main.zip) the package from github, then from the root folder:\n\n```\npython install .\n```\n\n## GNSS Time \u003ca name = \"gnsstime\"\u003e\u003c/a\u003e\n\nTo handles and convert time in different time system you should use the module ``gnsstime``. It will create a time in the ``datetime.datetime`` format, and also process the provided arguments.\n\n### Usage\n\nThe ``gnsstime`` object behave exactly like a ``datetime`` one, as it inherits from it.\n\n```python\nfrom gnsstools import gnsstime\n\n# Create a datetime from GNSS information\n# Year, Month, Day, Hour, Minute, Second, MicroSecond\ndate = gnsstime(18, 1, 1, 0, 0, 0)\ndate = gnsstime(2018, 1, 1, 0, 0, 0)\n```\n\nHowever, the ``gnsstime`` is not type sensitive: you can provide arguments as a ``string``, ``float`` or ``int``.\nIf the argument is a string, it will convert it first as a float. Then, depending on the argument, it will extract the decimal and update the other arguments.  \nFor example, if ``second=5.35``, the number of seconds will be ``5`` and the number of microsecond ``350000``. Same for ``day=2.74`` etc.\n\n```python\n# Provide arguments as a string\ndate = gnsstime(\"18\", \"1\", \"1\", \"0\", \"0\", \"0\")\ndate = gnsstime(\"2018\", \"01\", \"01\", \"00\", \"00\", \"00.000000\")\n\n# Provide argument as a float\ndate = gnsstime(2018, 1, 1, 5.933, 4.36, 33.231)\n```\n\nYou can also retrieve the number of days of the year, seconds of the day / weeks etc:\n\n```python\ndate = gnsstime(2018, 1, 1, 0, 0, 0)\n\ndoy = date.doy # Day of the year\nwoy = date.woy # Week of the year\nsod = date.sod # Second of the day\nsow = date.sow # Second of the week\n```\n\n### GPS Time\n\nYou can retrieve the number of seconds, days and weeks from a the GPS origin (*GPS0*) with:\n\n```python\ndate = gnsstime(2018, 1, 1, 0, 0, 0)\n\n# From GPS0 defined at 1980-01-06T00:00:00 (UTC)\nseconds0 = date.seconds0\ndays0 = date.days0\nweeks0 = date.weeks0\n```\n\n### Julian Day\n\nYou can also retrieved the Julian Day:\n\n```python\ndate = gnsstime(2000, 1, 1, 0, 0, 0)\n\n# Julian Day for year 2000\njd = date.jd\n# Julian Day for year 1950\njd50 = date.jd50\n```\n\nYou can also create a ``gnsstime`` object from a Julian Day:\n\n```python\njd = 2451545.0\ndate = gnsstime.fromjd(jd)\n\njd50 = 2433282.5\ndate = gnsstime.fromjd50(jd50)\n```\n\n### Modified Julian Day\n\nFinally, you can extract modified Julian Day:\n\n```python\ndate = gnsstime(2000, 1, 1, 0, 0, 0)\n\n# Modified Julian Day\nmjd = date.mjd\n```\n\nAgain, you can create a ``gnsstime`` object from a modified Julian Day:\n\n```python\nmjd = 51544.5\ndate = gnsstime.frommjd(mjd)\n```\n\n## Rinex \u003ca name=\"rinex\"\u003e\u003c/a\u003e\n\nLoad GNSS navigation and observation data as a ``pandas.DataFrame``.\n\nThe supported format are:\n- ``.**o`` : Rinex 2 Observation,\n- ``*O.rnx`` : Rinex 3 Observation,\n- ``.**n``, ``.**g`` : Rinex 2 Navigation,\n- ``*N.rnx`` : Rinex 3 Navigation,\n- ``.SP3`` : SP3\n\n### Observation\n\n```python\nfrom gnsstools import rinex\n\nfilename = \"data/edf1285b.18o\"\ndf = rinex.load(filename)\n```\n\n![Rinex2 Obs](media/rinex2_obs.png)\n\n### Navigation\n\n```python\nfrom gnsstools import rinex\n\nfilename = \"data/BRDC00IGS_R_20182850000_01D_MN.rnx\"\ndf = rinex.load(filename)\n```\n\n![Rinex3 Nav](media/rinex3_nav.png)\n\nOnce loaded, you select an ephemeris / satellite for a specific date with:\n\n```python\nfrom gnsstools import gnsstime\n\ndate = gnsstime(2018, 10, 12, 0, 40, 15)\nsatellite = df.select(\"G\", 2, date)\n```\n\nIf ``date`` is not part of the dataset ``df``, it will return the closest satellite.\n\n### SP3\n\n```python\nfrom gnsstools import rinex\n\nfilename = \"data/COM20225_15M.SP3\"\ndf = rinex.load(filename)\n```\n\n![Rinex3 SP3](media/rinex3_sp3.png)\n\n### Compact\n\n*Work in Progress*\n\n## Satellites \u003ca name = \"satellites\"\u003e\u003c/a\u003e\n\n*Work in Progress*\n\n## Contributing \u003ca name = \"contributing\"\u003e\u003c/a\u003e\n\n## Authors \u003ca name = \"authors\"\u003e\u003c/a\u003e\n\n## Acknowledgements \u003ca name = \"acknowledgement\"\u003e\u003c/a\u003e\n\n- Hat tip to anyone whose code was used\n- Inspiration\n- References\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthurdjn%2Fgnsstools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farthurdjn%2Fgnsstools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthurdjn%2Fgnsstools/lists"}