Skip to main content

Python package for NAIF WebGeoCalc API

Project description

Docs Build Coverage CodeFactor

PyPI Python Version Status

DOI License

Examples

In december 2018, JPL/NAIF announced an experimental API RESTful interface for their new WebGeoCalc server (which make online SPICE calculations). Documentation and JavaScript examples are already available.

This package provides a Python interface to make SPICE calculations through this API.

Note the user

WebGeoCalc is not design to handle heavy calculation. If you need to make intensive queries, use Spiceypy or SpiceMiner package with locally hosted kernels.

Install

With pip:

$ pip install webgeocalc

Usage

>>> from webgeocalc import API

>>> API.url
'https://wgc2.jpl.nasa.gov:8443/webgeocalc/api'

>>> API.kernel_sets() # /kernel-sets
[<KernelSetDetails> Solar System Kernels (id: 1),
 ...
 <KernelSetDetails> Cassini Huygens (id: 5),
 ...
 <KernelSetDetails> SPICE Class -- Binary PCK Lesson Kernels (Earth) (id: 39)]

>>> API.bodies(5) # /kernel-sets/{kernelSetId}/bodies
[<BodyData> CASSINI (id: -82),
 ...
 <BodyData> SOLAR SYSTEM BARYCENTER (id: 0)]

>>> API.frames('Cassini Huygens') # /kernel-sets/{kernelSetId}/frames
[<FrameData> CASSINI_SATURN_SKR4N_LOCK (id: -82982),
 ...
 <FrameData> ITRF93 (id: 13000)]

>>> API.instruments('Cassini Huygens') # /kernel-set/{kernelSetId}/instruments
[<InstrumentData> CASSINI_CIRS_RAD (id: -82898),
 ...
 <InstrumentData> CASSINI_SRU-A (id: -82001)]

Prepare calculation payload:

>>> from webgeocalc import Calculation

>>> calc = Calculation(
    kernels = 'Cassini Huygens',
    times = '2012-10-19T08:24:00.000',
    calculation_type = 'STATE_VECTOR',
    target = 'CASSINI',
    observer = 'SATURN',
    reference_frame = 'IAU_SATURN',
    aberration_correction = 'NONE',
    state_representation = 'PLANETOGRAPHIC',
)

>>> calc.payload
{'kernels': [{'type': 'KERNEL_SET', 'id': 5}],
 'times': ['2012-10-19T08:24:00.000'],
 'calculationType': 'STATE_VECTOR',
 'target': 'CASSINI',
 'observer': 'SATURN',
 'referenceFrame': 'IAU_SATURN',
 'aberrationCorrection': 'NONE',
 'stateRepresentation': 'PLANETOGRAPHIC',
 'timeSystem': 'UTC',
 'timeFormat': 'CALENDAR'}

Run calculation:

>>> calc.run()
[Calculation submitted] Status: LOADING_KERNELS (id: 19fd1c05-3bfe-47c7-bd16-28612249ae89)
[Calculation update] Status: COMPLETE (id: 19fd1c05-3bfe-47c7-bd16-28612249ae89)
{'DATE': '2012-10-19 08:24:00.000000 UTC',
 'LONGITUDE': 46.18900522,
 'LATITUDE': 21.26337134,
 'ALTITUDE': 694259.8921163,
 'D_LONGITUDE_DT': 0.00888655,
 'D_LATITUDE_DT': -0.00031533,
 'D_ALTITUDE_DT': 4.77080305,
 'SPEED': 109.34997994,
 'TIME_AT_TARGET': '2012-10-19 08:24:00.000000 UTC',
 'LIGHT_TIME': 2.51438831}

>>> from webgeocalc import AngularSeparation

More details can be found in the docs and in the Jupyter Notebooks.

Command Line Interface (cli)

The webgeocalc API can be call directly from the command line interface:

$ wgc-kernels --all
 - Solar System Kernels: (id: 1)
...
 - Cassini Huygens: (id: 5)
...
 - SPICE Class -- Binary PCK Lesson Kernels (Earth): (id: 39)

$ wgc-instruments 'Cassini Huygens' --name ISS
 - CASSINI_ISS_WAC_RAD: (id: -82369)
 - CASSINI_ISS_NAC_RAD: (id: -82368)
 - CASSINI_ISS_WAC: (id: -82361)
 - CASSINI_ISS_NAC: (id: -82360)

$ wgc-state-vector --kernels 5 \
                   --times 2012-10-19T09:00:00 \
                   --target CASSINI \
                   --observer SATURN \
                   --reference_frame IAU_SATURN
API status:
[Calculation submit] Status: COMPLETE (id: 041bf912-178f-4450-b787-12a49c8a3101)

Results:
DATE:
> 2012-10-19 09:00:00.000000 UTC
DISTANCE:
> 764142.63776247
SPEED:
> 111.54765899
X:
> 298292.85744169
Y:
> -651606.58468976
Z:
> 265224.81187627
D_X_DT:
> -98.8032491
D_Y_DT:
> -51.73211296
D_Z_DT:
> -2.1416539
TIME_AT_TARGET:
> 2012-10-19 08:59:57.451094 UTC
LIGHT_TIME:
> 2.54890548

More examples can be found in here.

Local development and testing

Setup: `bash pip install -e . pip install -r tests/requirements.txt -r docs/requirements.txt `

Linter: `bash flake8 setup.py docs/conf.py tests/ webgeocalc/ pylint webgeocalc/ tests/*.py `

Pytest: `bash pytest --cov=webgeocalc/ tests/ pytest --nbval-lax examples/ `

Docs: `bash sphinx-build docs docs/_build --color -W -bhtml sphinx-build docs docs/_build --color -W -bdoctest `

Disclaimer

This project is not supported or endorsed by either JPL, NAIF or NASA. The code is provided “as is”, use at your own risk.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

webgeocalc-1.4.0.tar.gz (30.5 kB view details)

Uploaded Source

Built Distribution

webgeocalc-1.4.0-py2.py3-none-any.whl (29.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file webgeocalc-1.4.0.tar.gz.

File metadata

  • Download URL: webgeocalc-1.4.0.tar.gz
  • Upload date:
  • Size: 30.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for webgeocalc-1.4.0.tar.gz
Algorithm Hash digest
SHA256 1b5544f9447135328cebba2a16c677104fdefb5d4a164be2f3f8cb4d83064699
MD5 7c91eb9fbcbd8ca94217f46f5032ba5d
BLAKE2b-256 b23d0ce7dd6ec491542adebc8fb469fd3417483e246171e886839aa223525446

See more details on using hashes here.

File details

Details for the file webgeocalc-1.4.0-py2.py3-none-any.whl.

File metadata

  • Download URL: webgeocalc-1.4.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 29.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for webgeocalc-1.4.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f3a65ce5cc8965cf67ade7a8173dbb92e7a76d8059742ab9ea0e0d69a95958a7
MD5 ec037b61e328e43bd6bf98c35a1de84a
BLAKE2b-256 d68ecd22c288aef3c6e57ba395a10050a4d4bfc10f5c9569c45af6dfbdbab4a6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page