JPL Horizons on-line solar system data and ephemeris computation service
ssd.jpl.nasa.gov
ssd.jpl.nasa.gov
I used to use the python package “jplephem” to support ephemeris queries, but I understand that SpiceyPy is a more modern replacement (https://github.com/AndrewAnnex/SpiceyPy). They all, I believe, use the same underlying sets of “spk” files containing coded ephemeris.
It does the same thing, uses the spk files to compute planetary positions, but it does so with a beautifull API which is a pleasure to use.
Just for some additional context, the main library used by all these packages is SPICE, a C library written and maintained by JPL. https://naif.jpl.nasa.gov/naif/aboutspice.html
It dates back to 1982, IIRC. And yeah, as mentioned you can still telnet in and check your calculations using their reference implementation.
The C library has been wrapped many times, but remains the main implementation at the core, and is used by a ton of missions and spacecraft for determining sun up/down times, pointing angles for heavenly bodies, time and precise keeping, etc etc.
I used it here to determine the relative angle of the sun at one of my favorite spots on the moon: https://api.jodavaho.io/s/readme
The software reads "kernel" files, which are very precise tables of positions over time, shape, etc, and can output just about anything you'd want to know about the layout of the solar system with precision good enough for whatever you'd want. Publishing a new kernel file is an infrequent, but fairly major affair, afaict.
It's a really fascinating look at what is required to do business in space. I recommend someone peruse their training materials for answers to questions you never thought about like: "If you want to view a crater during sunrise to get the nice shadows, what do you even mean "sunrise"?" which gets weird to answer because of speed of light and cosmic distances.
You of course know this, saying it for others: The files themselves are relatively unassuming, moderate sized (~3.1 GB the largest of them) binary files which contain the distilled best knowledge of where the planets and their moons will be based on humanity's best observations (visual, radar, trajectory data from probes, etc). They each have a validity window within which you can query the relative transforms between the objects the database contains. For example de441.bsp was published in 2020 and you can use it to predict the relative positions of any of the planets/moons it contains between the years −13200 to 17191. Or if you don't need to look that far in time you can use one of the smaller models like de440s.bsp (32 MB) which is good between 1849 to 2150.
Yes. My use case was/is determining pointing angles between a telescope at L2 and various nearby stars, to be sure it's not pointing anywhere near a bright body like a planet (around Sol) when it's expected to be observing exoplanets.
There are a lot of diverse use cases!
(On the video the mechanism is not using SPICE, just pointing at manually selected alt-az)
Whether you want to use SPICE or Horizons will depend on what you are trying to accomplish.
It is Dmitry Savransky who recommended your package, btw.
As a part of my work I have written a rust/python package[1] to compute the position of asteroids accurately using the ephemeris data provided by these two excellent sources. For the people who use SPICE kernels (a rather old binary format for storing orbital ephemeris), I have also written a custom implementation of spice kernel reading which is natively parallel.
The C SPICE library is available online, but it dates back decades, and was not really built with multi-core support in mind. My code enables reading of SPICE kernel files with native multi-core support. Though I would argue the bigger benefit that my code provides is the numerical integrator which can be used on the entire asteroid belt at once.
JPL Horizons API is open to anyone, if you hammer it enough they may rate limit you, but I don't believe they have limits. As far as I am aware they don't have any API keys or usernames. See: https://ssd-api.jpl.nasa.gov/doc/horizons.html
I want to plug our project for the curious: https://github.com/DarkStar1982/Orbidium/
it is just a static viewer, but can be augmented to do simulation/visualization in a similar manner.
I think I've read about maneuvers being sent in advance, but once a maneuver (or flyby) actually happens (which may result in deviations from the plan), how (fast) does the ephemeris data actually align with reality through measurement of the actual spacecraft position and speeds again?
but the you can use it to generate information by a really nice, freely-usable API.