Interpolation over multiple SP3 files

Orekit has a neat feature - via SP3Ephemeris.getPropagator() - to interpolate P&V between the points in an SP3 data file.

Can anybody suggest how best to extend this over multiple (consecutive) SP3 files?

Obviously I could stitch a series of SP3 files together into a single file. This works, but it’s clunky and is susceptible to problems if the SP3 files differ in data period (for example 15-minute epochs versus 5-minute epochs).

I’ve also tried creating an Ephemeris object, using position data from the SP3 files. This works reasonably well, but gives different results to the “built-in” SP3 interpolator (typically to the order of 10-20cm, but occasionally as much as 2-3m).

Another approach would be to have a series of SP3Ephemeris objects, and select the appropriate one for a given timestamp. However, given the source SP3 data (from IGS), this would leave an inaccessible 15 minute period at the end of each day.

Any suggestions gratefully received!

Hi Jimbo,

Good question. There isn’t a way to do that out of the box, but contributions are welcome!

The reason for the difference is probably that Ephemeris uses position, velocity, and acceleration to interpolate while EphemerisSegmentPropagator uses only the data in the file to interpolate.

Perhaps the easiest way would be to implement your own EphemerisSegment that contains the data from several files. You would have to make sure they have the same type data available, e.g. if one file has only P records while the other file has V records as well that could create a mismatch.


You can try to create an AggregateBoundedPropagator with a list of daily BoundedPropagator and interpolate afterwards. It worked for me, but I may be completely wrong. Beware that there is a discontinuity at the daily boundaries of IGS solutions.

Thanks very much, both, for your replies.

The AggregateBoundedPropagator approach was very straightforward - but, under the hood, I assume it’s just referring a PV request to one of the individual propagators. As a result, the time period between the end of one SP3 file and the beginning of the next is still inaccessible (Exception results).

The EphemerisSegment approach will need a little more work.