Giter Club home page Giter Club logo

gnsstools's Introduction

Project logo

Status License


Process RINEX, SP3 and other GNSS files for orbit computation and geo-localization. Retrieve precise satellites and receptors position in a few lines of code.

Table of Contents

About

Overview

This 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. Last but not least, gnsstools lets you correct GNSS orbits from raw files, and compute receptors' position.

Status

Development Status Feature
GNSS Time finished
  • DateTime
  • GPS Time
  • Julian Day
  • Modified Julian Day
Rinex in progress
  • Rinex Observation
  • Rinex Navigation
  • SP3
  • Rinex Compact
Satellites in progress
  • Position
  • Clock Offset
  • Pseudo Distance

Documentation

Read The Docs

The documentation is available online on readthedocs. You will find the code documentation of the whole package, examples and tutorials. Make sure you have read the documentation before opening an issue.

Tutorials

In addition of the examples and tutorials available on readthedocs, there is a list of jupyter notebooks. Each one focuses on a specific topic: reading files, retrieving orbits, computing receptor's position etc.

Getting Started

These instructions will show you the steps on how to install and use gnsstools straight from the box.

Installing

The package is available from PyPi. To install it, use:

pip install gnsstools

Alternatively, you can install the latest version from this repository. Download the package from github, then from the root folder:

python install .

GNSS Time

To 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.

Usage

The gnsstime object behave exactly like a datetime one, as it inherits from it.

from gnsstools import gnsstime

# Create a datetime from GNSS information
# Year, Month, Day, Hour, Minute, Second, MicroSecond
date = gnsstime(18, 1, 1, 0, 0, 0)
date = gnsstime(2018, 1, 1, 0, 0, 0)

However, the gnsstime is not type sensitive: you can provide arguments as a string, float or int. If 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.
For example, if second=5.35, the number of seconds will be 5 and the number of microsecond 350000. Same for day=2.74 etc.

# Provide arguments as a string
date = gnsstime("18", "1", "1", "0", "0", "0")
date = gnsstime("2018", "01", "01", "00", "00", "00.000000")

# Provide argument as a float
date = gnsstime(2018, 1, 1, 5.933, 4.36, 33.231)

You can also retrieve the number of days of the year, seconds of the day / weeks etc:

date = gnsstime(2018, 1, 1, 0, 0, 0)

doy = date.doy # Day of the year
woy = date.woy # Week of the year
sod = date.sod # Second of the day
sow = date.sow # Second of the week

GPS Time

You can retrieve the number of seconds, days and weeks from a the GPS origin (GPS0) with:

date = gnsstime(2018, 1, 1, 0, 0, 0)

# From GPS0 defined at 1980-01-06T00:00:00 (UTC)
seconds0 = date.seconds0
days0 = date.days0
weeks0 = date.weeks0

Julian Day

You can also retrieved the Julian Day:

date = gnsstime(2000, 1, 1, 0, 0, 0)

# Julian Day for year 2000
jd = date.jd
# Julian Day for year 1950
jd50 = date.jd50

You can also create a gnsstime object from a Julian Day:

jd = 2451545.0
date = gnsstime.fromjd(jd)

jd50 = 2433282.5
date = gnsstime.fromjd50(jd50)

Modified Julian Day

Finally, you can extract modified Julian Day:

date = gnsstime(2000, 1, 1, 0, 0, 0)

# Modified Julian Day
mjd = date.mjd

Again, you can create a gnsstime object from a modified Julian Day:

mjd = 51544.5
date = gnsstime.frommjd(mjd)

Rinex

Load GNSS navigation and observation data as a pandas.DataFrame.

The supported format are:

  • .**o : Rinex 2 Observation,
  • *O.rnx : Rinex 3 Observation,
  • .**n, .**g : Rinex 2 Navigation,
  • *N.rnx : Rinex 3 Navigation,
  • .SP3 : SP3

Observation

from gnsstools import rinex

filename = "data/edf1285b.18o"
df = rinex.load(filename)

Rinex2 Obs

Navigation

from gnsstools import rinex

filename = "data/BRDC00IGS_R_20182850000_01D_MN.rnx"
df = rinex.load(filename)

Rinex3 Nav

Once loaded, you select an ephemeris / satellite for a specific date with:

from gnsstools import gnsstime

date = gnsstime(2018, 10, 12, 0, 40, 15)
satellite = df.select("G", 2, date)

If date is not part of the dataset df, it will return the closest satellite.

SP3

from gnsstools import rinex

filename = "data/COM20225_15M.SP3"
df = rinex.load(filename)

Rinex3 SP3

Compact

Work in Progress

Satellites

Work in Progress

Contributing

Authors

Acknowledgements

  • Hat tip to anyone whose code was used
  • Inspiration
  • References

gnsstools's People

Contributors

arthurdjn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

gnsstools's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.