Android - getITRF takes up to 30 seconds

Hello,

I am using orekit in Android to calculate the latitude, longitude, altitude of Iridium satellites.
It works well and I am determining accurate geodetic points.
My issue is that I use:

Frame earthFrame = FramesFactory.getITRF(IERSConventions.IERS_2010, true);

And this call takes around 30 seconds to complete.

I was hoping to ask if this was expected? I believe that using true means that it will use simpleEOP and should generally complete quicker than without it.

I have tried other frames and they complete within 1 second, but they do not produce the correct locations and I don’t understand the differences in these frames well enough.

For reference, I am using TLE data from Celestrak, for example:
“IRIDIUM 106”,
“1 41917C 17003A 25140.11006944 .00002980 00000+0 10656-2 0 1406”,
“2 41917 86.3962 252.7335 0002773 98.4397 8.2363 14.34213221 10”

And my basic sequence of calculations is as follows:

val tle = TLE(satellite.LINE1, satellite.LINE2)
val propagator = TLEPropagator.selectExtrapolator(tle)
earthFrame = FramesFactory.getITRF(IERSConventions.IERS_2010, true)
val position = propagator.getPVCoordinates(observeAt, earthFrame).position
val earth = OneAxisEllipsoid(
  Constants.WGS84_EARTH_EQUATORIAL_RADIUS,
  Constants.WGS84_EARTH_FLATTENING,
  earthFrame)
 
val geoPoint: GeodeticPoint = earth.transform(position, earthFrame, observeAt)

latitude = Math.toDegrees(geoPoint.latitude)
longitude = Math.toDegrees(geoPoint.longitude)

So I guess my questions would be if anyone that may have used this method, is it expected to take around 30 seconds? I know using a PC is likely to be a lot faster than an android device, so maybe it isn’t as noticeable but I still wouldn’t expect it to take this long?

Also, is it be possible to use a different earth frame and still calculate the geodetic points somewhat accurately? I have tried TEME and GCRF but have not been able to calculate the correct locations but I’m sure I’m misunderstanding how these work.

Thanks

Answering my own question.
It appears that using

earthFrame = FramesFactory.getGTOD(false)

Will achieve the result I required and is much faster to complete.

I guess the problem is linked to Earth Orientation Parameters loading, which you avoid when using getGTOD(false).
Where do you get your EOP from? Is it from network, from an orekit-data folder on the device or from an orekit-data.zip file on the device? Loading from a zip file is supported but extremely slow, because of the zip format, which puts the archive table of content at the end. The huge JPL ephemeris in the zip file makes accessing all other files within the zip painly slow, even the small ones and even the ones that are at the beginning of the zip.

This is the reason why, in the tutorials, we recommend unzipping the file before using it.

It is a zip folder. That makes sense. I will test with the extracted version.

1 Like