Right ascension of the ascending node and geographic longitude

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?