{ "info": { "author": "Michael Hirsch, Ph.D.", "author_email": "scivision@users.noreply.github.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Science/Research", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Topic :: Scientific/Engineering :: Atmospheric Science" ], "description": "[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2580306.svg)](https://doi.org/10.5281/zenodo.2580306)\n[![Actions Status](https://github.com/scivision/georinex/workflows/ci/badge.svg)](https://github.com/scivision/georinex/actions)\n\n[![PyPi versions](https://img.shields.io/pypi/pyversions/georinex.svg)](https://pypi.python.org/pypi/georinex)\n[![PyPi Download stats](http://pepy.tech/badge/georinex)](http://pepy.tech/project/georinex)\n\n# GeoRinex\n\nRINEX 3 and RINEX 2 reader and batch conversion to NetCDF4 / HDF5 in Python or Matlab.\nBatch converts NAV and OBS GPS RINEX (including Hatanaka compressed OBS) data into\n[xarray.Dataset](http://xarray.pydata.org/en/stable/api.html#dataset)\nfor easy use in analysis and plotting.\nThis gives remarkable speed vs. legacy iterative methods, and allows for HPC / out-of-core operations on massive amounts of GNSS data.\nGeoRinex works in Python ≥ 3.6 and has over 125 unit tests driven by Pytest.\n\nPure compiled language RINEX processors such as within Fortran NAPEOS give perhaps 2x faster performance than this Python program--that's pretty good for a scripted language like Python!\nHowever, the initial goal of this Python program was to be for one-time offline conversion of ASCII (and compressed ASCII) RINEX to HDF5/NetCDF4,\nwhere ease of cross-platform install and correctness are primary goals.\n\n![RINEX plot](tests/example_plot.png)\n\n\n## Input data types\n\n* RINEX 3.x or RINEX 2.x\n * NAV\n * OBS\n* Plain ASCII or seamlessly read compressed ASCII in:\n * `.gz` GZIP\n * `.Z` LZW\n * `.zip`\n* Hatanaka compressed RINEX (plain `.crx` or `.crx.gz` etc.)\n* Python `io.StringIO` text stream RINEX'\n* .sp3 SP3-c ephemeris\n\n## Output\n\n* File: NetCDF4 (subset of HDF5), with `zlib` compression.\nThis yields orders of magnitude speedup in reading/converting RINEX data and allows filtering/processing of gigantic files too large to fit into RAM.\n* In-memory: Xarray.Dataset. This allows all the database-like indexing power of Pandas to be unleashed.\n\n## Install\n\nLatest stable release:\n```sh\npip install georinex\n```\n\nCurrent development version:\n```sh\ngit clone https://github.com/scivision/georinex\n\ncd georinex\n\npython -m pip install -e .\n```\n\nThe Hatanaka CRINEX converter automatically compiles if needed and a C compiler is available.\n\nCurrently, `unlzw` doesn't work on Windows, making `.Z` files unreadable.\n\n### Selftest\n\nIt can be useful to check the setup of your system with:\n```sh\npython -m pytest\n```\n\n```\n158 passed, 1 skipped\n```\n\n## Usage\n\nThe simplest command-line use is through the top-level `ReadRinex` script.\nNormally you'd use the `-p` option with single files to plot, if not converting.\n\n* Read single RINEX3 or RINEX 2 Obs or Nav file:\n ```sh\n ReadRinex myrinex.XXx\n ```\n* Read NetCDF converted RINEX data:\n ```sh\n ReadRinex myrinex.nc\n ```\n* Batch convert RINEX to NetCDF4 / HDF5 (this example for RINEX 2 OBS):\n ```sh\n rnx2hdf5 ~/data \"*o\" -o ~/data\n ```\n in this example, the suffix `.nc` is appended to the original RINEX filename: `my.15o` => `my.15o.nc`\n\nBy default all plots and status messages are off, unless using the `-p` option to save processing time.\n\nIt's suggested to save the GNSS data to NetCDF4 (a subset of HDF5) with the `-o`option,\nas NetCDF4 is also human-readable, yet say 1000x faster to load than RINEX.\n\nYou can also of course use the package as a python imported module as in\nthe following examples. Each example assumes you have first done:\n\n```python\nimport georinex as gr\n```\n\nUses speculative time preallocation `gr.load(..., fast=True)` by default.\nSet `fast=False` or `ReadRinex.py -strict` to fall back to double-read strict (slow) preallocation.\nPlease open a GitHub issue if this is a problem.\n\n### Time limits\nTime bounds can be set for reading -- load only data between those time bounds with the\n```sh\n--tlim start stop\n```\noption, where `start` and `stop` are formatted like `2017-02-23T12:00`\n\n```python\ndat = gr.load('my.rnx', tlim=['2017-02-23T12:59', '2017-02-23T13:13'])\n```\n\n### Measurement selection\nFurther speed increase can arise from reading only wanted measurements:\n```sh\n--meas C1C L1C\n```\n\n\n```python\ndat = gr.load('my.rnx', meas=['C1C', 'L1C'])\n```\n\n### Use Signal and Loss of Lock indicators\nBy default, the SSI and LLI (loss of lock indicators) are not loaded to speed up the program and save memory.\nIf you need them, the `-useindicators` option loads SSI and LLI for OBS 2/3 files.\n\n\n## read RINEX\n\nThis convenience function reads any possible format (including compressed, Hatanaka) RINEX 2/3 OBS/NAV or `.nc` file:\n\n```python\nobs = gr.load('tests/demo.10o')\n```\n\n\n### read times in OBS, NAV file(s)\nPrint start, stop times and measurement interval in a RINEX OBS or NAV file:\n```sh\nTimeRinex ~/my.rnx\n```\n\nPrint start, stop times and measurement interval for all files in a directory:\n```sh\nTimeRinex ~/data *.rnx\n```\n\nGet vector of `datetime.datetime` in RINEX file:\n```python\ntimes = gr.gettimes('~/my.rnx')\n```\n\n## read Obs\n\nIf you desire to specifically read a RINEX 2 or 3 OBS file:\n\n```python\nobs = gr.load('tests/demo_MO.rnx')\n```\n\nThis returns an\n[xarray.Dataset](http://xarray.pydata.org/en/stable/api.html#dataset) of\ndata within the .XXo observation file.\n\nNaN is used as a filler value, so the commands typically end with\n.dropna(dim='time',how='all') to eliminate the non-observable data vs\ntime. As per pg. 15-20 of RINEX 3.03\n[specification](ftp://igs.org/pub/data/format/rinex303.pdf),\nonly certain fields are valid for particular satellite systems.\nNot every receiver receives every type of GNSS system.\nMost Android devices in the Americas receive at least GPS and GLONASS.\n\n\n### read OBS header\nTo get a `dict()` of the RINEX file header:\n```python\nhdr = gr.rinexheader('myfile.rnx')\n```\n\n### Index OBS data\n\nassume the OBS data from a file is loaded in variable `obs`.\n\nSelect satellite(s) (here, `G13`) by\n```python\nobs.sel(sv='G13').dropna(dim='time',how='all')\n```\n\nPick any parameter (say, `L1`) across all satellites and time (or index via `.sel()` by time and/or satellite too) by:\n```python\nobs['L1'].dropna(dim='time',how='all')\n```\n\nIndexing only a particular satellite system (here, Galileo) using Boolean indexing.\n```python\nimport georinex as gr\nobs = gr.load('myfile.o', use='E')\n```\nwould load only Galileo data by the parameter E.\n`ReadRinex` allow this to be specified as the -use command line parameter.\n\nIf however you want to do this after loading all the data anyway, you can make a Boolean indexer\n```python\nEind = obs.sv.to_index().str.startswith('E') # returns a simple Numpy Boolean 1-D array\nEdata = obs.isel(sv=Eind) # any combination of other indices at same time or before/after also possible\n```\n\n### Plot OBS data\n\nPlot for all satellites L1C:\n```python\nfrom matplotlib.pyplot import figure, show\nax = figure().gca()\nax.plot(obs.time, obs['L1C'])\nshow()\n```\n\nSuppose L1C pseudorange plot is desired for `G13`:\n```python\nobs['L1C'].sel(sv='G13').dropna(dim='time',how='all').plot()\n```\n\n## read Nav\n\n\nIf you desire to specifically read a RINEX 2 or 3 NAV file:\n```python\nnav = gr.load('tests/demo_MN.rnx')\n```\n\nThis returns an `xarray.Dataset` of the data within the RINEX 3 or RINEX 2 Navigation file.\nIndexed by time x quantity\n\n\n### Index NAV data\n\nassume the NAV data from a file is loaded in variable `nav`.\nSelect satellite(s) (here, `G13`) by\n```python\nnav.sel(sv='G13')\n```\n\nPick any parameter (say, `M0`) across all satellites and time (or index by that first) by:\n```python\nnav['M0']\n```\n\n## Analysis\nA significant reason for using `xarray` as the base class of GeoRinex is that big data operations are fast, easy and efficient.\nIt's suggested to load the original RINEX files with the `-use` or `use=` option to greatly speed loading and conserve memory.\n\nA copy of the processed data can be saved to NetCDF4 for fast reloading and out-of-core processing by:\n```python\nobs.to_netcdf('process.nc', group='OBS')\n```\n`georinex.__init.py__` shows examples of using compression and other options if desired.\n\n### Join data from multiple files\nPlease see documentation for `xarray.concat` and `xarray.merge` for more details.\nAssuming you loaded OBS data from one file into `obs1` and data from another file into `obs2`, and the data needs to be concatenated in time:\n```python\nobs = xarray.concat((obs1, obs2), dim='time')\n```\nThe `xarray.concat`operation may fail if there are different SV observation types in the files.\nyou can try the more general:\n```python\nobs = xarray.merge((obs1, obs2))\n```\n\n### Receiver location\nWhile `APPROX LOCATION XYZ` gives ECEF location in RINEX OBS files, this is OPTIONAL for moving platforms.\nIf available, the `location` is written to the NetCDF4 / HDF5 output file on conversion.\nTo convert ECEF to Latitude, Longitude, Altitude or other coordinate systems, use\n[PyMap3d](https://github.com/scivision/pymap3d).\n\nRead location from NetCDF4 / HDF5 file can be accomplished in a few ways:\n\n* using `PlotRXlocation.py` script, which loads and plots all RINEX and .nc files in a directory\n* using `xarray`\n ```python\n obs = xarray.open_dataset('my.nc)\n\n ecef = obs.position\n latlon = obs.position_geodetic # only if pymap3d was used\n ```\n* Using `h5py`:\n ```python\n with h5py.File('my.nc') as f:\n ecef = h['OBS'].attrs['position']\n latlon = h['OBS'].attrs['position_geodetic']\n ```\n\n## Converting to Pandas DataFrames\nAlthough Pandas DataFrames are 2-D, using say `df = nav.to_dataframe()` will result in a reshaped 2-D DataFrame.\nSatellites can be selected like `df.loc['G12'].dropna(0, 'all')` using the usual\n[Pandas Multiindexing methods](http://pandas.pydata.org/pandas-docs/stable/advanced.html).\n\n## Benchmark\n\nAn Intel Haswell i7-3770 CPU with plain uncompressed RINEX 2 OBS processes in about:\n* [6 MB file](ftp://data-out.unavco.org/pub/rinex/obs/2018/021/ab140210.18o.Z): 5 seconds\n* [13 MB file](ftp://data-out.unavco.org/pub/rinex/obs/2018/021/ab180210.18o.Z): 10 seconds\n\nThis processing speed is about within a factor of 2 of compiled RINEX parsers, with the convenience of Python, Xarray, Pandas and HDF5 / NetCDF4.\n\nOBS2 and NAV2 currently have the fast pure Python read that has C-like speed.\n\n### Obs3\nOBS3 / NAV3 are not yet updated to new fast pure Python method.\n\nDone on 5 year old Haswell laptop:\n```sh\ntime ./ReadRinex.py tests/CEDA00USA_R_20182100000_23H_15S_MO.rnx.gz -u E\n```\n\n> real 48.6 s\n\n```sh\ntime ./ReadRinex.py tests/CEDA00USA_R_20182100000_23H_15S_MO.rnx.gz -u E -m C1C\n```\n\n> real 17.6 s\n\n### Profiling\nusing\n```sh\nconda install line_profiler\n```\nand `ipython`:\n```ipython\n%load_ext line_profiler\n\n%lprun -f gr.obs3._epoch gr.load('tests/CEDA00USA_R_20182100000_23H_15S_MO.rnx.gz', use='E', meas='C1C')\n```\nshows that `np.genfromtxt()` is consuming about 30% of processing time, and `xarray.concat` and xarray.Dataset` nested inside `concat` takes over 60% of time.\n\n\n\n## Notes\n\n* RINEX 3.03 specification: ftp://igs.org/pub/data/format/rinex303.pdf\n* RINEX 3.04 specification (Dec 2018): ftp://igs.org/pub/data/format/rinex304.pdf\n* RINEX 3.04 release notes: ftp://igs.org/pub/data/format/rinex304-release-notes.pdf\n\n\n- GPS satellite position is given for each time in the NAV file as\n Keplerian parameters, which can be\n [converted to ECEF](https://ascelibrary.org/doi/pdf/10.1061/9780784411506.ap03).\n- \n- \n\n### Number of SVs visible\nWith the GNSS constellations in 2018, per the\n[Trimble Planner](https://www.gnssplanning.com/)\nthe min/max visible SV would be about:\n\n* Maximum: ~60 SV maximum near the equator in Asia / Oceania with 5 degree elev. cutoff\n* Minimum: ~6 SV minimum at poles with 20 degree elev. cutoff and GPS only\n\n\n### RINEX OBS reader algorithm\n\n1. read overall OBS header (so we know what to expect in the rest of the OBS file)\n2. fill the xarray.Dataset with the data by reading in blocks --\n another key difference from other programs out there, instead of\n reading character by character, I ingest a whole time step of text\n at once, helping keep the processing closer to CPU cache making it\n much faster.\n\n### Data\n\nFor\n[capable Android devices](https://developer.android.com/guide/topics/sensors/gnss.html),\nyou can\n[log RINEX 3](https://play.google.com/store/apps/details?id=de.geopp.rinexlogger)\nusing the built-in GPS receiver.\n\nUNAVCO [site map](https://www.unavco.org/instrumentation/networks/map/map.html#/): identify the 4-letter callsign of a station, and look in the FTP sites below for data from a site.\n\nUNAVCO RINEX 3 data:\n\n* OBS: ftp://data-out.unavco.org/pub/rinex3/obs/\n* NAV: ftp://data-out.unavco.org/pub/rinex3/nav/\n\nUNAVCO RINEX 2 data:\n\n* OBS: ftp://data-out.unavco.org/pub/rinex/obs/\n* NAV: ftp://data-out.unavco.org/pub/rinex/nav/\n\n\n### Hatanaka compressed RINEX .crx\nThe compressed Hatanaka `.crx` or `.crx.gz` files are supported seamlessly via `crx2rnx` as noted in the Install section.\nThere are distinct from the supported `.rnx`, `.gz`, or `.zip` RINEX files.\n\nHatanaka, Y. (2008), A Compression Format and Tools for GNSS Observation\n Data, Bulletin of the Geospatioal Information Authority of Japan, 55, 21-30.\n(available at http://www.gsi.go.jp/ENGLISH/Bulletin55.html)", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/scivision/georinex", "keywords": "RINEX,HDF5,NetCDF", "license": "", "maintainer": "", "maintainer_email": "", "name": "georinex", "package_url": "https://pypi.org/project/georinex/", "platform": "", "project_url": "https://pypi.org/project/georinex/", "project_urls": { "Homepage": "https://github.com/scivision/georinex" }, "release_url": "https://pypi.org/project/georinex/1.13.0/", "requires_dist": null, "requires_python": ">= 3.6.2", "summary": "Python RINEX 2/3 NAV/OBS reader with speed and simplicity.", "version": "1.13.0" }, "last_serial": 5792948, "releases": { "1.10.0": [ { "comment_text": "", "digests": { "md5": "6419e4029b851000edd0b7929bf14b80", "sha256": "c7da820c2f20b4d038c51bea17fcabf17eae44221ccc5d2e2d860c4cfebcaeed" }, "downloads": -1, "filename": "georinex-1.10.0.tar.gz", "has_sig": false, "md5_digest": "6419e4029b851000edd0b7929bf14b80", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 5578257, "upload_time": "2019-03-28T19:24:16", "url": "https://files.pythonhosted.org/packages/0e/eb/5d6b4f72063613cb91131f474cbe39b0d7046860cbe2f1155c10511954f5/georinex-1.10.0.tar.gz" } ], "1.10.1": [ { "comment_text": "", "digests": { "md5": "46da0d4a13597d558bc11229541882ff", "sha256": "0e38b4cc7725c19bc1fef58fb0e0cefcd093490c71e0b868a0f814089b17ab79" }, "downloads": -1, "filename": "georinex-1.10.1.tar.gz", "has_sig": false, "md5_digest": "46da0d4a13597d558bc11229541882ff", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 6451063, "upload_time": "2019-05-17T22:05:06", "url": "https://files.pythonhosted.org/packages/2e/d6/cf49c01350c9d6fece6fb4d236b82e1fcfe7706a21d710d8d6a34bb599d3/georinex-1.10.1.tar.gz" } ], "1.11.0": [ { "comment_text": "", "digests": { "md5": "f9a76eb504b23396ee2523b3f404137a", "sha256": "2e2a20d3d202660793d815ab7129ea4bbd74cbd2ddd7052cf5412e942796f1a2" }, "downloads": -1, "filename": "georinex-1.11.0.tar.gz", "has_sig": false, "md5_digest": "f9a76eb504b23396ee2523b3f404137a", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 6454227, "upload_time": "2019-07-02T02:00:42", "url": "https://files.pythonhosted.org/packages/0b/0e/ef12ce41880b3e5bc7da87210ae00325215db4ea7746ee7f1f92320e585a/georinex-1.11.0.tar.gz" } ], "1.12.0": [ { "comment_text": "", "digests": { "md5": "74a08ffabd285fd6f4b2feafc6c62c09", "sha256": "6e0d6d6f379014a3d59ca265118f98854c35ee3367111389a64626c402cb82ec" }, "downloads": -1, "filename": "georinex-1.12.0.tar.gz", "has_sig": false, "md5_digest": "74a08ffabd285fd6f4b2feafc6c62c09", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 46230, "upload_time": "2019-09-03T07:34:21", "url": "https://files.pythonhosted.org/packages/82/5e/64bbeecf77bbacd5a34a94a439d8704005750bb7e77b70b62cfb12129cf8/georinex-1.12.0.tar.gz" } ], "1.12.1": [ { "comment_text": "", "digests": { "md5": "75aa7b8a137ba231a3250c8803682ffc", "sha256": "5af370c9714af78ef44f6f01b6bb6f358840ace029b3f611f0f108a6dd00dd1d" }, "downloads": -1, "filename": "georinex-1.12.1.tar.gz", "has_sig": false, "md5_digest": "75aa7b8a137ba231a3250c8803682ffc", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 47760, "upload_time": "2019-09-03T17:10:27", "url": "https://files.pythonhosted.org/packages/e1/38/46696f2021e7896cfbee0d741f763d05cd15699c39b274b27f33ffdb674f/georinex-1.12.1.tar.gz" } ], "1.12.2": [ { "comment_text": "", "digests": { "md5": "ad29aa5dcc39afe9aa44647fdbc71c55", "sha256": "34a7f45e001ffc91131659e8e14a058ecdbad687647fcdac4a3267e508bd0ad4" }, "downloads": -1, "filename": "georinex-1.12.2.tar.gz", "has_sig": false, "md5_digest": "ad29aa5dcc39afe9aa44647fdbc71c55", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 47742, "upload_time": "2019-09-03T17:20:50", "url": "https://files.pythonhosted.org/packages/5f/73/87a157ff2b0f70cae47e066f109306f847014551c8dcc095e1049602c40e/georinex-1.12.2.tar.gz" } ], "1.13.0": [ { "comment_text": "", "digests": { "md5": "facc21deefe45777c9951a784abfdd47", "sha256": "50434e75161ae9115e847271d8b299e6072ca6c3c812161c2dde2834f1eb11f0" }, "downloads": -1, "filename": "georinex-1.13.0.tar.gz", "has_sig": false, "md5_digest": "facc21deefe45777c9951a784abfdd47", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 47909, "upload_time": "2019-09-06T15:55:26", "url": "https://files.pythonhosted.org/packages/56/1a/a3ff8f124eedbf6274069d1b04d2f0a07be33996abacdda44481036b3164/georinex-1.13.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "26d50b08ce6b4afc03485b2c41546eb4", "sha256": "b6a1805553dbf03547720825f4c9f740ce3c93e0d204b7dcc448301eec3f88e5" }, "downloads": -1, "filename": "georinex-1.5.0.tar.gz", "has_sig": false, "md5_digest": "26d50b08ce6b4afc03485b2c41546eb4", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 17742, "upload_time": "2018-07-26T05:39:24", "url": "https://files.pythonhosted.org/packages/28/b7/1051b9175cc1bf8cf39b0779fd0ecf03753ad21504cdffd6915f2651a318/georinex-1.5.0.tar.gz" } ], "1.5.1.0": [ { "comment_text": "", "digests": { "md5": "3ae75ab7b53959a5c7ad1fe2c8067dd7", "sha256": "bbc3000963f04f5a2da268fbf135975718ee46f62b34d590eb61f2905a01815a" }, "downloads": -1, "filename": "georinex-1.5.1.0.tar.gz", "has_sig": false, "md5_digest": "3ae75ab7b53959a5c7ad1fe2c8067dd7", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 15943, "upload_time": "2018-07-26T22:17:12", "url": "https://files.pythonhosted.org/packages/a7/3c/09ce639c5ed8ee221743903bc041e9eb1531f957e94e35ccff28c47a08e5/georinex-1.5.1.0.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "5192ecbe2a8c5d2a3dd499b01e47f7da", "sha256": "7cdcc9265abe258ad0ba472c9b1c54d56425e7ad1155eab58e2f214537db594b" }, "downloads": -1, "filename": "georinex-1.5.2.tar.gz", "has_sig": false, "md5_digest": "5192ecbe2a8c5d2a3dd499b01e47f7da", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 17021, "upload_time": "2018-07-30T07:21:30", "url": "https://files.pythonhosted.org/packages/96/3f/651753f34c353e1520ffa70516f0bc5a6df1478a9b221eb1e34f4b605909/georinex-1.5.2.tar.gz" } ], "1.5.3": [ { "comment_text": "", "digests": { "md5": "3f6139e2c8663243c4c91830586c8e5b", "sha256": "a113f17353b289011d455949bad084c44d0b5e8920a88e8f41729358dc286f22" }, "downloads": -1, "filename": "georinex-1.5.3.tar.gz", "has_sig": false, "md5_digest": "3f6139e2c8663243c4c91830586c8e5b", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 20566, "upload_time": "2018-07-30T20:05:18", "url": "https://files.pythonhosted.org/packages/a0/aa/eb36b5ef5e0e31e06c803c0339b865bc0d1e11be88206bf99f9e50806dbe/georinex-1.5.3.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "93ae5d692f557ad286cffd0650b1b5e6", "sha256": "65ce6c4efc651576c0ddbfb1971a6d5ec998e4f92e9221638fcf02c14c4f08b4" }, "downloads": -1, "filename": "georinex-1.6.0.tar.gz", "has_sig": false, "md5_digest": "93ae5d692f557ad286cffd0650b1b5e6", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 24110, "upload_time": "2018-08-13T20:31:51", "url": "https://files.pythonhosted.org/packages/8e/d6/805e13b30d7f6c24a167f586978c84ec46e424cac23089ac502ef345ee9e/georinex-1.6.0.tar.gz" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "283feb19430e7fd88cd1aa3f998ec301", "sha256": "d41e0e274a7eb4bea5e5c8936dd19bfb14a520cb7717d568d8f1aaa8e9f79802" }, "downloads": -1, "filename": "georinex-1.6.1.tar.gz", "has_sig": false, "md5_digest": "283feb19430e7fd88cd1aa3f998ec301", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 25027, "upload_time": "2018-08-24T07:56:13", "url": "https://files.pythonhosted.org/packages/5f/b7/229392154b932a4dbf75d2bdca5c5b778eaf0e5a9da40901136d04c95342/georinex-1.6.1.tar.gz" } ], "1.6.4": [ { "comment_text": "", "digests": { "md5": "d66964720030e5bb3c0ff2765344ae4d", "sha256": "aa1b8cef2ac2603897a2c7142de3e43da67deabebf00359b8ed67a8d8287cd03" }, "downloads": -1, "filename": "georinex-1.6.4.tar.gz", "has_sig": false, "md5_digest": "d66964720030e5bb3c0ff2765344ae4d", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 23143, "upload_time": "2018-08-28T18:42:17", "url": "https://files.pythonhosted.org/packages/62/73/9c11b1648c728af9cfde69bb2890c081d515cc7376335c3583255b458b12/georinex-1.6.4.tar.gz" } ], "1.6.5": [ { "comment_text": "", "digests": { "md5": "c00a7e249aa927a421177ea08f7b758a", "sha256": "3dcb3dc703627bdf4836b22c6408fe0c44247a8828261b40a226f9b7ecf5b210" }, "downloads": -1, "filename": "georinex-1.6.5.tar.gz", "has_sig": false, "md5_digest": "c00a7e249aa927a421177ea08f7b758a", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 34683, "upload_time": "2018-08-30T22:15:30", "url": "https://files.pythonhosted.org/packages/97/53/1275fc94fc3a86f6ba8e039a5c7ef1f347ebfe99b2f026acf6d5d1146593/georinex-1.6.5.tar.gz" } ], "1.6.6": [ { "comment_text": "", "digests": { "md5": "4590ecd29317debfabbfc25734d5227c", "sha256": "f09c203eb9f0d1022b75a2cdfb1bd9ddbf27db14c3bba0e1774af5fd8848d5df" }, "downloads": -1, "filename": "georinex-1.6.6.tar.gz", "has_sig": false, "md5_digest": "4590ecd29317debfabbfc25734d5227c", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 35831, "upload_time": "2018-08-31T03:18:32", "url": "https://files.pythonhosted.org/packages/4c/bd/b01438488f340e391155da597bfe6a2cffaaf576cf741c7f212759bb9d89/georinex-1.6.6.tar.gz" } ], "1.6.7": [ { "comment_text": "", "digests": { "md5": "e5fb540480044309ff3035558b8f3bd7", "sha256": "d69284244c5cff4c5eabfa7b3b08f5dd5c741282bf828c4df3945a6078f8c8c4" }, "downloads": -1, "filename": "georinex-1.6.7.tar.gz", "has_sig": false, "md5_digest": "e5fb540480044309ff3035558b8f3bd7", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 36470, "upload_time": "2018-08-31T15:45:56", "url": "https://files.pythonhosted.org/packages/dc/4a/7b2a8619ec9faaf162a7df12978abd66b36ad8156c5aa5d5fc20c8905296/georinex-1.6.7.tar.gz" } ], "1.6.7.1": [ { "comment_text": "", "digests": { "md5": "ee9cdf768f372bb5ce8acf38f2ad1dbe", "sha256": "81559527205774a186fc98fb747d09275fc6c0851e6632917d3a89bb036b43d6" }, "downloads": -1, "filename": "georinex-1.6.7.1.tar.gz", "has_sig": false, "md5_digest": "ee9cdf768f372bb5ce8acf38f2ad1dbe", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3387825, "upload_time": "2018-09-02T04:03:40", "url": "https://files.pythonhosted.org/packages/c8/04/70ef7a487af8a2181c7bd1b00e73cd97a4b5ebb16d423d7e851ea316e2b4/georinex-1.6.7.1.tar.gz" } ], "1.6.7.2": [ { "comment_text": "", "digests": { "md5": "5d8315382c45650b6ace5a46e241c52d", "sha256": "d304865d069cae7cf982bacd5a6ab288021e64546438e3dfeb5d416a4f1638f8" }, "downloads": -1, "filename": "georinex-1.6.7.2.tar.gz", "has_sig": false, "md5_digest": "5d8315382c45650b6ace5a46e241c52d", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3388950, "upload_time": "2018-09-20T16:41:23", "url": "https://files.pythonhosted.org/packages/2d/f7/79974e13be53c8189d6db76858e1685253e168140f38edbaf16620f7a961/georinex-1.6.7.2.tar.gz" } ], "1.6.7.3": [ { "comment_text": "", "digests": { "md5": "c45a72f39774ff084ffd1fe019d84a69", "sha256": "c0d69f0a960e0a09c9851561be8b158bb4bc764d42b8e36a475545e942605f1a" }, "downloads": -1, "filename": "georinex-1.6.7.3.tar.gz", "has_sig": false, "md5_digest": "c45a72f39774ff084ffd1fe019d84a69", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3389411, "upload_time": "2018-10-03T16:42:48", "url": "https://files.pythonhosted.org/packages/f8/67/a132b88e1ddd95ea9023e4e847c9a909285fe754c42a7e01bb1d78845da2/georinex-1.6.7.3.tar.gz" } ], "1.6.8": [ { "comment_text": "", "digests": { "md5": "394134d63c8da258fa7e2deb26340a5d", "sha256": "bb50d367804db01c0fa2435e1db2a1115b4eadcc213ce401f69a32e736a47b12" }, "downloads": -1, "filename": "georinex-1.6.8.tar.gz", "has_sig": false, "md5_digest": "394134d63c8da258fa7e2deb26340a5d", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3390054, "upload_time": "2018-10-31T16:22:11", "url": "https://files.pythonhosted.org/packages/97/87/e6096587bb9fe2317747b1d299eda3e0f47883b1bec06142dbf512e4fe86/georinex-1.6.8.tar.gz" } ], "1.6.8.1": [ { "comment_text": "", "digests": { "md5": "54f9f1f423b0858fe08dc8513012c3f6", "sha256": "4f68a73c737536142615370cbdfde42dadc72faa4b6cc7e8c76aa5d46cc463c4" }, "downloads": -1, "filename": "georinex-1.6.8.1.tar.gz", "has_sig": false, "md5_digest": "54f9f1f423b0858fe08dc8513012c3f6", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3391597, "upload_time": "2018-11-02T19:40:25", "url": "https://files.pythonhosted.org/packages/3e/1e/13db18ea2ca01e49a0b32b051fe1cb777c55b7866c9f8eb7b0dc08a49586/georinex-1.6.8.1.tar.gz" } ], "1.6.8.2": [ { "comment_text": "", "digests": { "md5": "561e1262ed041766eb771ceecd8cb541", "sha256": "576e9b634d1a136891195d76f529f955a652962d88c0467317d185abb1aece51" }, "downloads": -1, "filename": "georinex-1.6.8.2.tar.gz", "has_sig": false, "md5_digest": "561e1262ed041766eb771ceecd8cb541", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3391748, "upload_time": "2018-11-07T12:21:52", "url": "https://files.pythonhosted.org/packages/71/21/438786f2e6c37f502318ec5c1d6fb064c056e3ea00426171fa4068a0bc4d/georinex-1.6.8.2.tar.gz" } ], "1.6.9": [ { "comment_text": "", "digests": { "md5": "9cdd67497ca97859f89a8be3de4b3594", "sha256": "a5d78074c97ebcfc28bcb435cadc651c4ad575954f0c5a1aa884b1a30a65a119" }, "downloads": -1, "filename": "georinex-1.6.9.tar.gz", "has_sig": false, "md5_digest": "9cdd67497ca97859f89a8be3de4b3594", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3393643, "upload_time": "2019-01-01T02:53:48", "url": "https://files.pythonhosted.org/packages/60/39/c54eda40096d2db1f7eaf9f89e1398048be7f4237729e2bdd09ead751efd/georinex-1.6.9.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "e53d3231599bdf608066401fba34351e", "sha256": "24018394e6835f3eb3656207864952a956f4e143d9396fa067088bf5982e65be" }, "downloads": -1, "filename": "georinex-1.7.0.tar.gz", "has_sig": false, "md5_digest": "e53d3231599bdf608066401fba34351e", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3394431, "upload_time": "2019-01-01T05:38:55", "url": "https://files.pythonhosted.org/packages/54/2f/bee8836476bd9b5156a35f05829b3f1ba40b959cfce3e35addfe4869e752/georinex-1.7.0.tar.gz" } ], "1.7.1": [ { "comment_text": "", "digests": { "md5": "c973b9798d9067c1cee52eb130e655fa", "sha256": "37a30e750896a6810b4e65239a9a864ac7c5e9b1f80ba060cfd070cd4e864d78" }, "downloads": -1, "filename": "georinex-1.7.1.tar.gz", "has_sig": false, "md5_digest": "c973b9798d9067c1cee52eb130e655fa", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3395701, "upload_time": "2019-01-18T19:19:32", "url": "https://files.pythonhosted.org/packages/1e/ef/ba863e42fcc5a547a322b6b7a3c4ba540b34271e49f6ae510ed0d59764dd/georinex-1.7.1.tar.gz" } ], "1.8.0": [ { "comment_text": "", "digests": { "md5": "ff4d0f024434fc12073bfc3252e6adab", "sha256": "6de37ce076ae1b021071b8b2f5b14a489aa806f2d3daa3389ad998581351912e" }, "downloads": -1, "filename": "georinex-1.8.0.tar.gz", "has_sig": false, "md5_digest": "ff4d0f024434fc12073bfc3252e6adab", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3446858, "upload_time": "2019-02-28T18:12:38", "url": "https://files.pythonhosted.org/packages/dd/2d/730fa1e62fc5094d12c8b26fde82df6412a83d8bb9baf9887e9809b93abb/georinex-1.8.0.tar.gz" } ], "1.9.0": [ { "comment_text": "", "digests": { "md5": "6cc093662ff138e6a48cab678109a298", "sha256": "ba351c0d5c891814d26686bfeb68f70f4e4bf17b7cff7699778fcce9a051ea24" }, "downloads": -1, "filename": "georinex-1.9.0.tar.gz", "has_sig": false, "md5_digest": "6cc093662ff138e6a48cab678109a298", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 3447585, "upload_time": "2019-03-05T18:56:59", "url": "https://files.pythonhosted.org/packages/fb/fb/37c4324684e421c51f60de7d573b0422515529551de40c7f9afca1ddb876/georinex-1.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "facc21deefe45777c9951a784abfdd47", "sha256": "50434e75161ae9115e847271d8b299e6072ca6c3c812161c2dde2834f1eb11f0" }, "downloads": -1, "filename": "georinex-1.13.0.tar.gz", "has_sig": false, "md5_digest": "facc21deefe45777c9951a784abfdd47", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6.2", "size": 47909, "upload_time": "2019-09-06T15:55:26", "url": "https://files.pythonhosted.org/packages/56/1a/a3ff8f124eedbf6274069d1b04d2f0a07be33996abacdda44481036b3164/georinex-1.13.0.tar.gz" } ] }