Ecliptic frame, J2000 sun-centric


I would like to use ecliptic coordinate system centered in Sun, and its direction to be Mean equinox of a standard epoch (J2000).

How would you construct such coordinate system?
What I am doing now is:
-get EME2000 geocentric frame
-use EclitpicProvider to align it with ecliptic
-use translation transform to change origin of such frame from geocentric to suncentric (I calculate translation between Earth and Sun).

Is there a better approach? I also wonder if mine does not introduce some errors.
Thank you for any help provided.


Sorry for double post, but I would like to make my question more precise.
I am looking for IAU76/J2000 heliocentric ecliptic frame implementation. Are we able to get it in Orekit?
JPL Horizons web interface is providing orbital parameters in this frame:

Initial IAU76/J2000 heliocentric ecliptic osculating elements (au, days, deg.):

The problem with my previous approach is that EclipticProvider is aligning MOD with ecliptic. I would need a provider that aligns EME2000 with ecliptic.



Hi, I don’t think that frame is available out of the box, though you might be able to construct it using the existing transform providers. Contributions are always welcome.

Asteroid propagation not matching MPC results

Here is what worked for me :

  • Heliocentric Aries (J2000) ecliptic frame
  • This system has its Z axis perpendicular to the plane of the Earth’s orbit
  • around the Sun (positive North) and its X axis towards the First Point of
  • Aries (the direction in space defined by the intersection between the Earth’s
  • equatorial plane and the plane of its orbit around the Sun (the plane of the
  • ecliptic). This system is (to first order) fixed with respect to the distant
  • stars.

public final class EclipticFrame extends Frame {

/** Serializable UID */
private static final long serialVersionUID = -2626811243057956275L;

/** Ecliptic frame name */
private static final String FRAME_NAME = "HELIOCENTRIC ECLIPTIC J2000";

/** Parent frame */
private static final Frame PARENT_FRAME = FramesFactory.getEME2000();

/** Instance */
private static EclipticFrame instance;

 * Constructor
private EclipticFrame() {
	super(PARENT_FRAME, new LocalTransformProvider(), FRAME_NAME);

 * @return Instance of Ecliptic frame
public static EclipticFrame getInstance() {
	if (instance == null) {
		instance = new EclipticFrame();
	return instance;

 * {@inheritDoc}
public boolean isPseudoInertial() {
	return true;

private static class LocalTransformProvider implements TransformProvider {

	/** Serializable UID */
	private static final long serialVersionUID = -9133094479942135342L;

	 * {@inheritDoc}
	public Transform getTransform(final AbsoluteDate date) throws OrekitException {
		// translation to Sun
		Vector3D sunCoords = PARENT_FRAME
				.getTransformTo(CelestialBodyFactory.getSun().getInertiallyOrientedFrame(), date).getTranslation();
		Transform translation = new Transform(date, sunCoords);
		// Ecliptic frame is based on MOD, so it has to be fixed on J2000 epoch where
		// EME2000 = MOD
		Transform rotation = PARENT_FRAME.getTransformTo(FramesFactory.getEcliptic(IERSConventions.IERS_2010),

		return new Transform(date, translation, rotation);

	public <T extends org.hipparchus.RealFieldElement<T>> FieldTransform<T> getTransform(
			final FieldAbsoluteDate<T> date) throws OrekitException {
		// method not implemented
		return null;