This group at JPL is the canonical source for solar system ephemeris, including planets and small bodies. The underlying models are numerically integrated equations of motion that I’m sure include all kinds of corrections, especially for bodies of great interest — such as Mars, or moons being considered for science visits.
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.
Indeed, I've met many of them and worked with some of them. One of the main devs for this webapi project, who is a delight to work with, was just laid off sadly.
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.
Totally sentimental view on my part, but I consider the JPL ephemeris files one of the crowning achievements of humankind. On par with other things like a modern microprocessor, the pyramids, or the electric grid.
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.
it's not sentimentality. They represent a truly amazing effort to gather both the raw data and the underlying mathematical models to make unbelievably accurate predictions.
> 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.
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.
:D all of these super cool and highly professional uses of SPICE kernels and here I am using the same thing to point an arrow to where the planets are as a room decoration :D https://www.youtube.com/shorts/32BGeJav2OQ
(On the video the mechanism is not using SPICE, just pointing at manually selected alt-az)
oh hey, I'm the developer of SpiceyPy. IIRC jplephem implements their own parsing of spk files and isn't a full implementation of the SPICE API. SpiceyPy simply wraps SPICE (via CSPICE).
This is consistent with what I know. I did not need the full API for my use case, just access to planet positions across times in the next few decades.
It is Dmitry Savransky who recommended your package, btw.
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.