Hello everyone.
How to convert the right ascension of the ascending node into geographic longitude?Conversion to epoch time. Does Orekit provide this functionality?
Thanks!
Hi!
What I recommend is to use the full orbit and not only the RAAN.
Giving an Orbit
and the BodyShape
representing your central body, you can have the geographic longitude with
bodyShape.transform(orbit.getPVCoordinates().getPosition(), orbit.getFrame(), orbit.getDate()).getLongitude();
Now, if you want the longitude in terms of equinoctial elements you can obtain with
longitudeEquinoctial = perigeeArgument + RAAN + anomaly
Depending if the anomaly
is mean or true you will have a mean or true longitude.
Bryan
Hello @newWL,
I would like to suggest another solution to complete @bcazabonne’s answer which only use the RAAN and epoch as inputs. It is from a purely geometrical point of view :
package org.example;
import org.hipparchus.geometry.euclidean.threed.Vector3D;
import org.hipparchus.util.FastMath;
import org.orekit.data.DataContext;
import org.orekit.data.DataProvider;
import org.orekit.data.DirectoryCrawler;
import org.orekit.frames.Frame;
import org.orekit.frames.FramesFactory;
import org.orekit.frames.Transform;
import org.orekit.time.AbsoluteDate;
import org.orekit.utils.IERSConventions;
import java.awt.*;
import java.io.File;
public class RAANToLon {
private static void loadOrekitData() {
final File rootFile = new File(System.getProperty("user.home"));
final File orekitFile = new File(rootFile, "orekit-data");
final DataProvider dirCrawler = new DirectoryCrawler(orekitFile);
DataContext.getDefault().getDataProvidersManager().addProvider(dirCrawler);
}
public static void main(String[] args) {
// Load Orekit data
loadOrekitData();
// Inputs
final double raan = FastMath.toRadians(30.);
final AbsoluteDate epoch = new AbsoluteDate();
// Convert to longitude
final Frame eme2000 = FramesFactory.getEME2000();
final Frame itrf = FramesFactory.getITRF(IERSConventions.IERS_2010, false);
final Transform eme2000ToITRF = eme2000.getTransformTo(itrf, epoch);
final Vector3D dirInEME2000 = new Vector3D(FastMath.cos(raan), FastMath.sin(raan),0.);
final Vector3D dirInITRF = eme2000ToITRF.transformVector(dirInEME2000);
final double lon = FastMath.acos(dirInITRF.dotProduct(Vector3D.PLUS_I) / dirInITRF.getNorm());
System.out.format("Epoch : %s\n",epoch);
System.out.format("Raan : %4.2f°\n",FastMath.toDegrees(raan));
System.out.format("Longitude: %4.2f°",FastMath.toDegrees(lon));
}
}
Cheers,
Vincent
Thank you so much for your help. I really appreciate it.
Thank you so much for your help. I really appreciate it. Your support means a lot to me and I am grateful for your kindness.
Thank you for your help. The result I converted with your method does not match STK. What is the reason?
Hi @newWL,
Could you provide me with your test case and expected results so i can investigate it on my end ?
Cheers,
Vincent
Thank you for your help. I apologize for any inconvenience caused.
Inputs
raan = FastMath.toRadians(120.0)
epoch = AbsoluteDate(2020, 6, 10, 12, 00, 00.000, TimeScalesFactory.getUTC())
#Output
40.95907874323129
The above is the result of running your code.
The orbit built to obtain LLA is -137.61578912644933.
Hi @newWL and sorry for answering late,
I have yet to see the flaw in my logic. Could you provide me the full orbit so i can compare with Bryan’s code ?
Cheers,
Vincent
Hello @newWL the result you obtain for the geographic longitude corresponding to the given right ascension using @Vincent code is correct.
All the best
Thanks! What is the geographic longitude you obtained?